📅  最后修改于: 2023-12-03 14:49:01.420000             🧑  作者: Mango
在二叉树中,每个节点最多有两个子节点。一个二叉树的最后一级节点指的是所有深度等于树的高度的节点,也就是那些没有子节点的节点。
如果需要找到最后一级节点中最左边的节点,可以使用递归的方法或者层次遍历的方法。
递归方法可以通过深度优先搜索来实现。从根节点开始,先尝试访问左子节点,如果左子节点存在,则继续访问左子节点,直到找到最后一级节点最左边的节点。
代码示例:
def find_bottom_left_value(root):
"""
:type root: TreeNode
:rtype: int
"""
def dfs(node, depth):
if not node:
return None, depth - 1
if not node.left and not node.right:
return node.val, depth
left_val, left_depth = dfs(node.left, depth+1)
right_val, right_depth = dfs(node.right, depth+1)
if left_depth >= right_depth:
return left_val, left_depth
else:
return right_val, right_depth
return dfs(root, 0)[0]
这个方法的时间复杂度是 $O(n)$,空间复杂度取决于二叉树的深度。
层次遍历方法可以使用广度优先搜索来实现。从根节点开始,先进入队列,然后每次弹出队列的头部元素,先访问左子节点,然后访问右子节点,直到找到最后一级节点最左边的节点。
代码示例:
from collections import deque
def find_bottom_left_value(root):
"""
:type root: TreeNode
:rtype: int
"""
queue = deque()
queue.append(root)
while queue:
node = queue.popleft()
if node.right:
queue.append(node.right)
if node.left:
queue.append(node.left)
return node.val
这个方法的时间复杂度是 $O(n)$,空间复杂度取决于二叉树的宽度。
以上就是查找二叉树最后一级节点最左边的节点的两种解法,开发者可以根据实际需求选择适合自己的方法。