此题解采用深度优先搜索(DFS)来寻找二叉树最底层最左边的节点值。使用两个非局部变量:left来记录当前找到的最左值,curH来记录当前的最大深度。DFS从根节点开始,对每个节点检查其深度是否超过了当前已知的最大深度curH。如果是,更新curH和left。DFS首先访问左子节点,确保最左的节点会被优先记录。
时间复杂度: O(n)
空间复杂度: O(n)
# 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 findBottomLeftValue(self, root: TreeNode) -> int:
left = root.val # 初始时,最左值设置为根节点值
curH = -1 # 初始最大深度为-1,表示还未开始遍历
def dfs(node, height):
nonlocal left, curH # 引用外层的变量
if not node:
return # 空节点直接返回
if height > curH:
curH = height # 更新当前最大深度
left = node.val # 更新最左值
dfs(node.left, height + 1) # 先递归左子树
dfs(node.right, height + 1) # 后递归右子树
dfs(root, 0) # 从根节点开始,高度为0
return left # 返回最左值