leetcode 671
Published:
题目671
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。
更正式地说,root.val = min(root.left.val, root.right.val) 总成立。
给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。
输入样例
输入:root = [2,2,5,null,null,5,7] 输出:5 解释:最小的值是 2 ,第二小的值是 5 。
解析
父节点比所有的子节点都小,但是要去寻找不等于根节点的最小值
题解
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def searchTree(self,node:TreeNode,valLimit):
if not node:
return None
if node.val>valLimit:
return node.val
else:
l=self.searchTree(node.left,valLimit)
r=self.searchTree(node.right,valLimit)
if l and r:
return min(l,r)
elif l:
return l
elif r:
return r
else:
return None
def findSecondMinimumValue(self, root: TreeNode) -> int:
minval=root.val
x=self.searchTree(root,minval)
return (x if x else -1)