📅  最后修改于: 2023-12-03 15:26:09.535000             🧑  作者: Mango
树是计算机科学中常用的数据结构之一。在树遍历中,有三种遍历方式:前序遍历、中序遍历和后序遍历。这些遍历方式依次访问树中的每个节点,分别以不同的顺序遍历树中的节点。
对于问题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))
这将输出所有从根到叶子节点的路径。
在本文中,我们介绍了树遍历的三种方式,并实现了一个程序来构建二叉树,并找出从根到叶子节点的所有路径。这是一个常见的数据结构问题,在面试中也可能遇到类似的问题。我们应该了解这些遍历方式,以及如何递归地构建二叉树并找到所有的路径。