📅  最后修改于: 2023-12-03 15:21:52.769000             🧑  作者: Mango
在本文中,我们将讨论如何使用中序遍历(Inorder traversal)和层序遍历(Level traversal)结果构造一棵二叉树。
对于一个二叉树,中序遍历的结果就是从小到大排列的节点值序列,而层序遍历的结果就是按照从上到下、从左到右的顺序遍历所有节点。因此,如果我们知道了一个二叉树的中序遍历和层序遍历结果,那么我们就能够重构出这个二叉树的结构。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def buildTree(inorder: List[int], levelorder: List[int]) -> TreeNode:
if not inorder:
return None
root_val = levelorder[0]
root = TreeNode(root_val)
i = inorder.index(root_val)
left_inorder = inorder[:i]
right_inorder = inorder[i+1:]
left_levelorder = [x for x in levelorder if x in left_inorder]
right_levelorder = [x for x in levelorder if x in right_inorder]
root.left = buildTree(left_inorder, left_levelorder)
root.right = buildTree(right_inorder, right_levelorder)
return root
代码中我们定义了一个 TreeNode 类来表示二叉树节点,同时也给出了 buildTree 函数的实现。该函数的输入为中序遍历和层序遍历结果,输出为构造好的二叉树的根节点。
在本文中,我们介绍了从中序遍历和层序遍历结果构造一棵二叉树的算法流程,并给出了 Python 实现。当然,Java 等其他编程语言也可以用类似的思想来解决该问题。