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     }

 

相关文章:

  • 2021-09-01
  • 2021-07-07
  • 2021-12-02
  • 2022-12-23
  • 2022-12-23
  • 2021-05-02
  • 2021-04-08
猜你喜欢
  • 2021-10-12
  • 2021-10-19
  • 2021-07-17
  • 2021-06-13
  • 2021-09-30
相关资源
相似解决方案