📅  最后修改于: 2023-12-03 15:06:34.340000             🧑  作者: Mango
二叉树是一种常见的数据结构,它由节点和边构成。每个节点最多只有两个子节点,称为左子节点和右子节点。叶节点则是没有子节点的节点。在这里,我们要求从右到左打印二叉树的所有叶节点。
从右到左打印二叉树的所有叶节点,可以使用深度优先搜索(Depth-First-Search,DFS)算法。具体实现如下:
leaves
存储所有叶节点。leaves
中;否则,如果存在左子节点,则对其进行递归调用;如果存在右子节点,则对其进行递归调用。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})$。