leetcode(104)- 从前序遍历与中序遍历序列构造二叉树

给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。
示例 1:
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
示例 2:
Input: preorder = [-1], inorder = [-1]
Output: [-1]
提示:
1 <= preorder.length <= 3000
inorder.length == preorder.length
-3000 <= preorder[i], inorder[i] <= 3000
preorder 和 inorder 均无重复元素
inorder 均出现在 preorder
preorder 保证为二叉树的前序遍历序列
inorder 保证为二叉树的中序遍历序列
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法:
递归,首先前序遍历第一个元素为根节点,因为二叉树无重复的元素所以在中序遍历中找到这个根节点自然其左边的都是根节点的左子树,右边的是右子树:
在这里插入图片描述
如图这样425就是根节点1的左子树的前序遍历,245就是根节点1右子树的中序遍历,因此可以递归完成树的构建。

class Solution(object):
    def buildTree(self, preorder, inorder):
        """
        :type preorder: List[int]
        :type inorder: List[int]
        :rtype: TreeNode
        """
        if not (preorder and inorder):
            return None
        head = TreeNode(preorder[0])
        mid_index = inorder.index(preorder[0])

        head.left = self.buildTree(preorder[1:mid_index+1],inorder[0:mid_index])
        head.right = self.buildTree(preorder[mid_index+1:],inorder[mid_index+1:])

        return head

猜你喜欢

转载自blog.csdn.net/qq_37668436/article/details/120641676