📜  打印二叉树的节点成为叶节点时(1)

📅  最后修改于: 2023-12-03 14:54:27.630000             🧑  作者: Mango

打印二叉树的节点成为叶节点时

在二叉树中,叶节点是指没有子节点的节点。当一个节点的左右子树都为空时,它就是一个叶节点。本文将介绍如何打印出一个二叉树所有成为叶节点的节点。

一、使用递归实现

我们可以使用递归的思想来实现打印二叉树所有的叶节点。具体思路如下:

  1. 对于一个节点,如果它没有左右子树,就将该节点的值加入到一个列表中。
  2. 如果它有左子树,就递归遍历左子树。
  3. 如果它有右子树,就递归遍历右子树。

最终,我们就可以得到一个包含所有叶节点的列表。

下面是使用 Python 语言实现的代码:

def print_leaves(root):
    if not root:
        return []
    if not root.left and not root.right:
        return [root.val]
    res = []
    if root.left:
        res += print_leaves(root.left)
    if root.right:
        res += print_leaves(root.right)
    return res
二、使用迭代实现

除了递归,我们还可以使用迭代的方式来实现打印二叉树所有的叶节点。具体思路如下:

  1. 创建一个栈,将根节点压入栈中。
  2. 循环检查栈是否为空,如果不为空,则弹出栈顶节点,如果该节点为叶节点,则将该节点的值加入到一个列表中,否则将该节点的左右子节点依次压入栈中。

最终,我们就可以得到一个包含所有叶节点的列表。

下面是使用 Python 语言实现的代码:

def print_leaves_iterative(root):
    if not root:
        return []
    stack = [root]
    res = []
    while stack:
        node = stack.pop()
        if not node.left and not node.right:
            res.append(node.val)
        if node.left:
            stack.append(node.left)
        if node.right:
            stack.append(node.right)
    return res
三、总结

本文介绍了两种方法来打印二叉树的所有叶节点:递归和迭代。递归方法代码简单,但对于大型二叉树会存在堆栈溢出的问题。迭代方法则不会出现这个问题。在实际应用中,可以选择根据需要使用相应的方法。