📜  二叉树最后一级的左节点 - (1)

📅  最后修改于: 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)$,空间复杂度取决于二叉树的宽度。

以上就是查找二叉树最后一级节点最左边的节点的两种解法,开发者可以根据实际需求选择适合自己的方法。