📅  最后修改于: 2023-12-03 15:21:57.643000             🧑  作者: Mango
在二叉树中,叶节点是指既没有左儿子,也没有右儿子的节点。在许多场景中,需要遍历一棵二叉树,从左到右打印出所有的叶节点。这个问题看似简单,但是在实现过程中需要仔细处理各种边界条件和数据结构维护。
最朴素的实现思路是对二叉树进行一次深度优先遍历,对于每个遍历到的节点,判断其是否是叶节点,如果是则将其加入结果列表中。在进行遍历时需要考虑节点是否为空,是否访问过(防止出现环),采用什么遍历方法等问题。
另一种思路是采用层次遍历,从根节点开始依次访问每一层的节点,当一个节点为叶节点时就将其加入结果列表。
两种实现思路各有优缺点,具体使用哪种方法需要根据具体问题的特点来决定。
我们可以使用递归或栈来实现深度优先遍历。以下示例代码展示了使用递归实现从左到右打印所有叶节点的方法:
def print_leaves(root):
res = []
def dfs(node):
if not node:
return
if not node.left and not node.right:
res.append(node.val)
dfs(node.left)
dfs(node.right)
dfs(root)
return res
层次遍历通常使用队列来实现,以下示例代码展示了使用队列实现从左到右打印所有叶节点的方法:
def print_leaves(root):
res = []
q = [root]
while q:
node = q.pop(0)
if not node:
continue
if not node.left and not node.right:
res.append(node.val)
q.append(node.left)
q.append(node.right)
return res
从左到右打印二叉树的所有叶节点是一个比较基础的二叉树遍历问题,实现较为简单。但是需要注意边界条件,避免出现栈溢出等问题。在实际应用中可以根据具体情况选择不同的遍历方法,以达到最优解。