671. 二叉树中第二小的节点
题目链接 | 671. 二叉树中第二小的节点 |
---|---|
思路 | 树的遍历(DFS) |
题解链接 | 官方题解 |
关键点 | 利用树的性质进行适当剪枝:1. 树的根节点为全局最小点 2. 父节点的值为该子树的最小值 |
时间复杂度 | \(O(n)\) |
空间复杂度 | \(O(n)\) |
代码实现:
class Solution:
def findSecondMinimumValue(self, root: Optional[TreeNode]) -> int:
answer = -1
val = root.val
def dfs(node):
if node is None:
return
nonlocal answer
if answer != -1 and node.val >= answer:
return
if node.val > val:
answer = node.val
return
dfs(node.left)
dfs(node.right)
dfs(root)
return answer