Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
1 class Solution { 2 public: 3 TreeNode* createTree(vector<int>& preorder,int prestart,int preend,vector<int>& inorder,int instart,int inend) 4 { 5 if(instart>inend) return NULL; 6 7 int root=preorder[prestart]; 8 int index; 9 10 for(int i=instart;i<=inend;i++) 11 { 12 if(inorder[i]==root) 13 { 14 index=i; 15 break; 16 } 17 } 18 19 int len=index-instart; 20 TreeNode * left=createTree(preorder,prestart+1,prestart+len,inorder,instart,index-1); 21 //TreeNode * left=createTree(preorder,prestart+1,prestart+len-1,inorder,instart,index-1); 22 //TreeNode * right=createTree(preorder,prestart+len,preend-1,inorder,index+1,inend); 23 TreeNode * right=createTree(preorder,prestart+len+1,preend,inorder,index+1,inend); 24 TreeNode *node=new TreeNode(root); 25 node->left=left; 26 node->right=right; 27 28 return node; 29 } 30 31 32 TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { 33 if(preorder.size()==0) return NULL; 34 35 TreeNode* head=createTree(preorder,0,preorder.size()-1,inorder,0,inorder.size()-1); 36 return head; 37 } 38 };