📜  使用一个堆栈从左到右打印二叉树中的叶节点(1)

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

使用堆栈从左到右打印二叉树中的叶节点

在二叉树中,叶节点是指没有子节点的节点。本文将介绍如何使用堆栈从左到右打印出二叉树中的叶节点。

思路

使用深度优先遍历的方式遍历二叉树的每一个节点,同时使用一个堆栈来保存遍历过的节点。当遍历到叶节点时,将其加入到结果集中。最后按照从左到右的顺序输出结果集。

实现

使用 Python 实现示例代码如下:

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

def get_leaves(root: TreeNode):
    if not root:
        return []
    
    stack = [root]
    leaves = []
    
    while stack:
        cur_node = stack.pop()
        if not cur_node.left and not cur_node.right:  # 当前节点为叶节点
            leaves.append(cur_node.val)
        if cur_node.right:  # 先将右子树入栈
            stack.append(cur_node.right)
        if cur_node.left:  # 后将左子树入栈
            stack.append(cur_node.left)
            
    return leaves
测试

为了测试代码的正确性,我们编写了以下测试用例:

# 构建一棵二叉树
root = TreeNode(1,
                TreeNode(2,
                         TreeNode(4),
                         TreeNode(5)),
                TreeNode(3,
                         TreeNode(6),
                         TreeNode(7,
                                  TreeNode(8),
                                  None)))

# 测试代码
assert get_leaves(root) == [4, 5, 6, 8]
总结

本文介绍了如何使用一个堆栈从左到右打印出二叉树中的叶节点。代码实现简单,但思路需要理解清楚才能写出正确的程序。