当前位置: 首页 > 后端技术 > Python

力扣-0671.二叉树中第二小的节点【Python】

时间:2023-03-25 23:07:47 Python

问题Leetcode给定一棵非空的特殊二叉树,每个节点都是正数,每个节点的子节点个数只能是2或0。如果一个节点有两个子节点,则该节点的值等于两个子节点中较小的一个。更正式地说,root.val=min(root.left.val,root.right.val)总是成立。给定这样一棵二叉树,您需要输出所有节点中第二小的值。如果第二个最小值不存在,则输出-1。示例1:输入:root=[2,2,5,null,null,5,7]输出:5解释:最小的值为2,第二小的值为5。示例2:输入:root=[2,2,2]输出:-1解释:最小值是2,但没有第二小值。提示:树中的节点数在[1,25]范围内1<=Node.val<=231-1对于树中的每个节点root.val==min(root.left.val,root.right.val)思路DFS根据题意,最小的元素一定是根节点,所以找一个比根节点大的节点就行了。CodePython3#定义二叉树节点。#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclass解决方法:deffindSecondMinimumValue(self,root:TreeNode)->int:ifnotroot:return-1defdfs(root,val):ifnotroot:return-1#根据题目,最小元素一定是根节点,所以只要找到一个比根节点大的节点ifroot.val>val:returnroot.valleft=dfs(root.left,val)right=dfs(root.right,val)ifleft==-1:returnrightifright==-1:returnleftreturnmin(left,right)returndfs(root,root.val)链接GitHub