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

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

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

在二叉树中,从根节点到任意一个叶子节点都是一条路径。如果要将二叉树中所有节点的路径打印出来,可以使用深度优先搜索(DFS)。

对于完整二叉树,我们可以分别在左子树和右子树中递归求解路径,然后将根节点和左右子树的路径进行拼接。

程序如下:

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


def print_paths(root: TreeNode) -> List[str]:
    if not root:
        return []
    
    if not root.left and not root.right:
        return [str(root.val)]
    
    paths = []
    left_paths = print_paths(root.left)
    for p in left_paths:
        paths.append(str(root.val) + '->' + p)
        
    right_paths = print_paths(root.right)
    for p in right_paths:
        paths.append(str(root.val) + '->' + p)
        
    return paths

其中,TreeNode为二叉树节点的定义,print_paths函数接收一个二叉树的根节点,返回一个所有节点路径的列表。

首先判断根节点是否为空,如果为空则返回空列表;如果是叶子节点,则返回自身的路径。

如果不是叶子节点,则对左右子树进行递归,得到所有的子树路径。然后将根节点和左右子树路径进行拼接,并添加到路径列表中。

最后返回所有路径列表即可。

使用示例:

root = TreeNode(1, TreeNode(2, TreeNode(4), TreeNode(5)), TreeNode(3, TreeNode(6), TreeNode(7)))
paths = print_paths(root)
for path in paths:
    print(path)

输出结果:

1->2->4
1->2->5
1->3->6
1->3->7

以上便是从根到完整二叉树中所有节点的打印路径的介绍,可以帮助程序员更好地处理二叉树节点路径相关的问题。