Construct Binary Tree from Preorder and Inorder Traversal [LeetCode]

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: Just do it recursively.

 1     TreeNode *build(vector<int> &preorder, int pstart, int pend, vector<int> &inorder, int istart, int iend) {
 2         TreeNode * root = new TreeNode(preorder[pstart]); 
 3         int idx_root = -1;
 4         for(int i = istart; i <= iend; i ++) {
 5             if(inorder[i] == preorder[pstart]){
 6                 idx_root = i;
 7                 break;
 8             }
 9         }
10         
11         if(idx_root == -1)
12             return NULL;
13             
14         int left_size = idx_root - istart;
15         if(left_size > 0 )
16             root->left = build(preorder, pstart + 1, pstart + left_size, inorder, istart, idx_root - 1);
17             
18         int right_size = iend - idx_root;
19         if(right_size > 0)
20             root->right = build(preorder, pend - right_size + 1 , pend, inorder, idx_root + 1, iend);
21         
22         return root;
23     }
24 
25     TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
26         if(preorder.size() == 0 || inorder.size() == 0 || preorder.size() != inorder.size())
27             return NULL;
28         
29         return build(preorder, 0, preorder.size() -1, inorder, 0, inorder.size() - 1);
30     }

 

posted @ 2013-11-21 12:09  假日笛声  阅读(185)  评论(0编辑  收藏  举报