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 };

 

posted on 2015-05-21 23:14  黄瓜小肥皂  阅读(102)  评论(0编辑  收藏  举报