题目描述:
题解:
参考:掘金
根据前序和中序遍历结果重构二叉树: 1.前序遍历结果中第一个为根结点 2.根据前序遍历第一个节点确定的根结点值,在中序遍历中找到根节点位置rootidx,中序遍历结果中该位置左边为左子树,右边为右子树。前序遍历结果中preorder[1:rootidx+1]为左子树,preorder[rootidx+1:]为右子树。 3.对左右子树递归调用重构函数。 class Solution(object): def buildTree(self, preorder, inorder): if len(preorder)==0: return None if len(preorder)==1: return TreeNode(preorder[0]) else: root = preorder[0] res = TreeNode(root) rootidx = inorder.index(root) res.left = self.buildTree(preorder[1:rootidx+1],inorder[:rootidx]) res.right = self.buildTree(preorder[rootidx+1:],inorder[rootidx+1:]) return res