📌  相关文章
📜  从根到完整二叉树中所有节点的打印路径(1)

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

从根到完整二叉树中所有节点的打印路径

简介

在完整二叉树中,我们可以沿着从根节点到每一个叶子节点的路径,依次打印路径上的所有节点,这是一个常见的二叉树问题。本文将介绍如何遍历完整二叉树获取从根到每个叶子节点的打印路径。

实现

我们可以使用递归的方式遍历完整二叉树,并在遍历到叶子节点时把路径打印出来。具体实现如下:

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

def print_node_path(node, path):
    if node is None:
        return

    # 如果节点是叶子节点,输出当前路径
    if node.left is None and node.right is None:
        print(path + [node.val])
    
    # 遍历左子树
    if node.left:
        print_node_path(node.left, path + [node.val])
    
    # 遍历右子树
    if node.right:
        print_node_path(node.right, path + [node.val])

我们从根节点开始遍历二叉树,记录当前路径(以列表形式存储),如果遇到叶子节点则输出路径。接着我们递归遍历左子树和右子树,分别传入左右子树的根节点以及当前路径加上当前节点值的列表。这里用到了 Python 中的列表拼接,可以将两个列表合并为一个。

示例

我们可以构建一个完整二叉树,来测试上述代码:

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

我们按照上述方法遍历此二叉树,输出所有叶子节点的路径:

root = Node(1)
root.left = Node(2)
root.left.left = Node(4)
root.left.right = Node(5)
root.right = Node(3)
root.right.left = Node(6)
root.right.right = Node(7)

print_node_path(root, [])

输出结果:

[1, 2, 4]
[1, 2, 5]
[1, 3, 6]
[1, 3, 7]
总结

在完整二叉树中获取从根节点到每个叶子节点的打印路径是一个非常基础的二叉树问题,在面试中经常会涉及到。我们可以使用递归的方式遍历整棵树,记录当前路径,如果遇到叶子节点则输出路径。这个方法可以很容易地扩展到非完整二叉树中。