📅  最后修改于: 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]
本文介绍了如何使用一个堆栈从左到右打印出二叉树中的叶节点。代码实现简单,但思路需要理解清楚才能写出正确的程序。