Skip to content

Commit 5c4ce33

Browse files
committed
C++/105_Construct_Binary_Tree_from_Preorder_and_Inorder_Traversal.cpp
1 parent 0131871 commit 5c4ce33

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
Given preorder and inorder traversal of a tree, construct the binary tree.
3+
4+
Note:
5+
You may assume that duplicates do not exist in the tree.
6+
7+
Tag:
8+
Tree, Array, Depth-first-search
9+
10+
Author:
11+
Xinyu Liu
12+
*/
13+
14+
#include <iostream>
15+
#include <vector>
16+
using namespace std;
17+
18+
19+
// Definition for a binary tree node.
20+
struct TreeNode {
21+
int val;
22+
TreeNode *left;
23+
TreeNode *right;
24+
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
25+
};
26+
27+
class Solution {
28+
public:
29+
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
30+
return subtree(preorder, 0, preorder.size() - 1 , inorder, 0, preorder.size() - 1);
31+
}
32+
TreeNode* subtree(vector<int>& preorder, int begin1, int end1, vector<int>& inorder, int begin2, int end2){
33+
int i;
34+
if(end1 < begin1)
35+
return NULL;
36+
if(end1 == begin1)
37+
return new TreeNode(preorder.at(begin1));
38+
39+
TreeNode* root = new TreeNode(preorder.at(begin1));
40+
for(i = begin2; i < end2; i++){
41+
if(inorder.at(i) == root->val)
42+
break;
43+
}
44+
int left_length = i - begin2;
45+
root->left = subtree(preorder, begin1 + 1, begin1 + left_length, inorder, begin2, begin2 + left_length - 1);
46+
root->right = subtree(preorder, begin1 + left_length + 1, end1, inorder, begin2 + left_length + 1, end2);
47+
return root;
48+
}
49+
};
50+
51+
void main(){
52+
53+
int pre[] = {1,2,3,4};
54+
vector<int> preorder(pre, pre + sizeof(pre) / sizeof(int));
55+
int in[] = {2,1,4,3};
56+
vector<int> inorder(in, in + sizeof(in) / sizeof(int));
57+
Solution sol;
58+
TreeNode* root = sol.buildTree(preorder, inorder);
59+
60+
}

0 commit comments

Comments
 (0)