Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
You may assume that duplicates do not exist in the tree.
Solution:
We implement the algorithm recursively, for instance given the tree to obtain
That corresponds to the lists:
preorder: A B D E C and inorder: D B E A C
We see that the first element of the preorder corresponds to the root value, A.
Note that by definition:
- All the elements in the inorder tree previous to this element (A) belong to the left tree and appear in the preorder tree just after the root.
- All the elements in the inorder tree after this element (A) belong to the right tree and appear in the preorder tree at the end.
# Definition for a binary tree node # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # @param preorder, a list of integers # @param inorder, a list of integers # @return a tree node def buildTree(self, preorder, inorder): return self.buildTreeRec(preorder, inorder, 0, 0, len(preorder)) def buildTreeRec(self, preorder, inorder, indPre, indIn, element): if element==0: return None solution = TreeNode(preorder[indPre]) numElementsLeftSubtree = 0; for i in range(indIn, indIn+element): if inorder[i] == preorder[indPre]: break numElementsLeftSubtree += 1 solution.left = self.buildTreeRec(preorder, inorder, indPre+1, indIn, numElementsLeftSubtree) solution.right = self.buildTreeRec(preorder, inorder, indPre+numElementsLeftSubtree+1, indIn+numElementsLeftSubtree+1, element-1-numElementsLeftSubtree) return solution
No comments :
Post a Comment