Construct Binary Tree from Preorder and Inorder Traversal

Given preorder and inorder traversal of a tree, construct the binary tree.

Note: You may assume that duplicates do not exist in the tree.

Solution:

The key point is to figure out the root for each recursion and also use python sub list [start:stop:step] to locate a range of preorder and inorder instead of indexing range.

    def buildTree(self, preorder, inorder):
        """
        :type preorder: List[int]
        :type inorder: List[int]
        :rtype: TreeNode
        """
        if preorder == None or inorder == None or len(preorder) == 0 or len(inorder) == 0:
            return None
        root = TreeNode(preorder[0])
        i = inorder.index(preorder[0])

        root.left = self.buildTree(preorder[1 : i + 1], inorder[0:i])
        root.right = self.buildTree(preorder[i + 1: len(preorder)], inorder[i + 1 : len(inorder)])

        return root

Last updated

Was this helpful?