从inorder和preorder遍历重构二叉树是一个常见的编程问题,可以使用递归或迭代的方法来解决。这里我们给出一个使用递归方法的Python实现:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def buildTree(preorder, inorder):
if not preorder or not inorder:
return None
root_val = preorder[0]
root_index = inorder.index(root_val)
left_inorder = inorder[:root_index]
right_inorder = inorder[root_index+1:]
left_preorder = preorder[1:1+len(left_inorder)]
right_preorder = preorder[1+len(left_inorder):]
left_tree = buildTree(left_preorder, left_inorder)
right_tree = buildTree(right_preorder, right_inorder)
return TreeNode(root_val, left_tree, right_tree)
这个函数接受两个列表作为参数,分别是preorder和inorder遍历的结果。首先,我们找到根节点的值,然后在inorder遍历中找到根节点的位置,从而确定左子树和右子树的inorder遍历结果。接着,我们根据左子树和右子树的inorder遍历结果,在preorder遍历中找到对应的子树,并递归地构建左子树和右子树。最后,返回根节点。
这个函数的时间复杂度是O(n),其中n是二叉树中节点的数量。
领取专属 10元无门槛券
手把手带您无忧上云