📌  相关文章
📜  从左到右打印二叉树的所有叶节点 | Set-2(迭代方法)(1)

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

从左到右打印二叉树的所有叶节点 | Set-2 (迭代方法)

在本教程中,我们将介绍如何使用迭代方法从左到右打印二叉树的所有叶节点。该算法可以帮助你更好地理解二叉树的结构和遍历方法。

什么是二叉树?

二叉树是一种特殊的树形数据结构,其中每个节点最多有两个子节点。树的最上层节点称为“根节点”,其他节点称为“子节点”。子节点可分为“左子节点”和“右子节点”,由于每个节点最多有两个子节点,所以通常称之为“二叉树”。

迭代方法

迭代方法是指通过遍历树的节点并对其执行指定的操作,从而递归地访问树的每个节点。迭代方法类似于递归方法,但是实现方式不同。递归方法使用函数调用栈来保存中间状态,而迭代方法使用栈或队列数据结构来保存中间状态。

在本文中,我们将使用迭代方法来遍历二叉树并找到所有叶节点。

演练
问题描述

给定一个二叉树,打印所有叶节点从左到右。如果该二叉树为:

      1
    /   \
   2     3
  / \   / \
 4   5 6   7

则打印:4, 5, 6, 7。

解决方案

我们可以使用栈数据结构来迭代访问二叉树的节点。如果节点为叶节点,则将其值添加到叶节点列表中。否则,将该节点的子节点添加到栈中以便后续遍历。

以下是使用Python语言实现的算法:

class Node:
    def __init__(self, val=None, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def print_leaves(root):
    if not root:
        return

    stack = [root]
    leaves = []

    while stack:
        node = stack.pop()

        if not node.left and not node.right:
            leaves.append(node.val)

        if node.right:
            stack.append(node.right)

        if node.left:
            stack.append(node.left)

    print(leaves)
总结

在本文中,我们介绍了使用迭代方法从左到右打印二叉树的所有叶节点。该算法使用栈数据结构保存中间状态,以避免使用函数调用栈增加空间复杂度。如果你对二叉树完全理解并掌握了算法,则在实现时应该不会遇到问题。