首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从inorder和preorder遍历重构二叉树

从inorder和preorder遍历重构二叉树是一个常见的编程问题,可以使用递归或迭代的方法来解决。这里我们给出一个使用递归方法的Python实现:

代码语言:python
代码运行次数:0
复制
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是二叉树中节点的数量。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券