日野弥生:勉強しよう

LeetCode 671 - 二叉树中第二小的节点

发表于2025年03月25日

#树 #二叉树 #深度优先搜索

本题关键在于理解该特殊二叉树的构建行为。最重要的是:根节点本身就是树里最小值的节点。

class Solution:
    def findSecondMinimumValue(self, root: Optional[TreeNode]) -> int:
        if not root:
            return -1
        # 根节点就是最小值,所以本题主要改动的是secondMin
        firstMin, secondMin = root.val, sys.maxsize

        def findSecondMinimumValueIMPL(root: Optional[TreeNode]):
            nonlocal firstMin, secondMin
            if not root:
                return
            # python3可以这么写判断:仅在这时候需要更新次小值
            if firstMin < root.val < secondMin:
                secondMin = root.val
            # 如果相等才继续遍历,否则不必遍历了,因为剩下的子节点都是比根secondMin大的
            elif root.val == firstMin:
                findSecondMinimumValueIMPL(root.left)
                findSecondMinimumValueIMPL(root.right)

        findSecondMinimumValueIMPL(root)
        if secondMin >= sys.maxsize:
            return -1
        return secondMin

フラッシュタブ:LeetCode

题目链接:https://leetcode.cn/problems/second-minimum-node-in-a-binary-tree/

上一篇

LeetCode 993 - 二叉树的堂兄弟节点

下一篇

LeetCode 297 - 二叉树的序列化与反序列化