剑指 Offer 07. 重建二叉树(python)

题目链接

题目描述:

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

例如,给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
剑指 Offer 07. 重建二叉树(python)_第1张图片
解题思路:
1.找出前序的第一个元素,即为根节点,将该节点创建为一个树节点
2.找出该节点在中序中的索引root_index,中序中,该索引之前的即为左子树,之后的即为右子树
3.前序遍历中左子树的索引为1到中序遍历中根节点的位置,右子树的索引为中序遍历中根节点的位置+1到末尾
4。递归调用

class Solution:
    def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
        if len(preorder)==0:
            return None
        root=TreeNode(preorder[0])
        root_index=inorder.index(preorder[0])
        root.left=self.buildTree(preorder[1:root_index+1],inorder[:root_index])
        root.right=self.buildTree(preorder[root_index+1:],inorder[root_index+1:])
        return root

你可能感兴趣的:(leetcode)