📜  从右到左打印二叉树的所有叶节点(1)

📅  最后修改于: 2023-12-03 15:06:34.340000             🧑  作者: Mango

从右到左打印二叉树的所有叶节点

二叉树是一种常见的数据结构,它由节点和边构成。每个节点最多只有两个子节点,称为左子节点和右子节点。叶节点则是没有子节点的节点。在这里,我们要求从右到左打印二叉树的所有叶节点。

思路

从右到左打印二叉树的所有叶节点,可以使用深度优先搜索(Depth-First-Search,DFS)算法。具体实现如下:

  1. 定义一个列表 leaves 存储所有叶节点。
  2. 从二叉树的根节点开始遍历,如果当前节点左右子节点都不存在,则将其放入 leaves 中;否则,如果存在左子节点,则对其进行递归调用;如果存在右子节点,则对其进行递归调用。
  3. 递归结束后,返回 leaves 列表,其中存储了所有叶节点。
示例
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def print_leaves(root: TreeNode) -> List[int]:
    """
    从右到左打印二叉树的所有叶节点
    :param root: 根节点
    :return: 所有叶节点的列表
    """
    leaves = []

    def dfs(node):
        if not node:
            return
        if not node.left and not node.right:  # 叶节点
            leaves.append(node.val)
            return
        if node.right:
            dfs(node.right)
        if node.left:
            dfs(node.left)

    dfs(root)
    return leaves
性能分析

时间复杂度:$O(n)$,其中 $n$ 是二叉树的节点数。

空间复杂度:$O(h)$,其中 $h$ 是二叉树的高度。在最坏情况下,二叉树退化为链表,此时 $h=n$,空间复杂度为 $O(n)$。在最好情况下,二叉树平衡,此时 $h=\log{n}$,空间复杂度为 $O(\log{n})$。