leetcode 671

less than 1 minute read

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)