📜  数据结构|树遍历|问题7(1)

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

数据结构 | 树遍历 | 问题7

介绍

树是计算机科学中常用的数据结构之一。在树遍历中,有三种遍历方式:前序遍历、中序遍历和后序遍历。这些遍历方式依次访问树中的每个节点,分别以不同的顺序遍历树中的节点。

对于问题7,我们需要使用前序遍历和中序遍历的结果来构建二叉树,并求出该二叉树的所有路径。路径是指从根节点到叶子节点的所有节点值组成的序列。

实现

我们可以使用递归来遍历二叉树,并找出所有的路径。以下是一个Python实现:

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

def buildTree(preorder: List[int], inorder: List[int]) -> TreeNode:
    if not preorder:
        return None

    root_val = preorder[0]
    root = TreeNode(root_val)

    inorder_index = inorder.index(root_val)

    root.left = buildTree(preorder[1:inorder_index+1], inorder[:inorder_index])
    root.right = buildTree(preorder[inorder_index+1:], inorder[inorder_index+1:])

    return root

def binaryTreePaths(root: TreeNode) -> List[str]:
    if not root:
        return []

    result = []
    path = []

    def dfs(node: TreeNode):
        if not node:
            return

        path.append(str(node.val))

        if not node.left and not node.right:
            result.append("->".join(path))

        dfs(node.left)
        dfs(node.right)

        path.pop()

    dfs(root)

    return result

在上面的代码中,我们首先使用前序遍历中的第一个节点来创建根节点。然后,我们在中序遍历中查找根节点,分成左右子树,并递归地构建左右子树。最后,我们使用深度优先搜索(DFS)来找出所有从根到叶子节点的路径。当遍历到一个叶子节点时,我们将当前路径添加到结果列表中。

使用

我们可以使用以下代码来测试我们的实现:

preorder = [1, 2, 3, 5]
inorder = [2, 1, 5, 3]

root = buildTree(preorder, inorder)

print(binaryTreePaths(root))

这将输出所有从根到叶子节点的路径。

结论

在本文中,我们介绍了树遍历的三种方式,并实现了一个程序来构建二叉树,并找出从根到叶子节点的所有路径。这是一个常见的数据结构问题,在面试中也可能遇到类似的问题。我们应该了解这些遍历方式,以及如何递归地构建二叉树并找到所有的路径。