日野弥生:勉強しよう
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