Skip to content

Commit cfcb3b3

Browse files
committed
preorder and inorder traversal
1 parent 6cd7fda commit cfcb3b3

2 files changed

+74
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//Construct Binary Tree from Preorder and Inorder Traversal
2+
/**
3+
* Definition for binary tree
4+
* struct TreeNode {
5+
* int val;
6+
* TreeNode *left;
7+
* TreeNode *right;
8+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
9+
* };
10+
*/
11+
class Solution {
12+
public:
13+
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
14+
int prelen = preorder.size();
15+
int inlen = inorder.size() - 1;
16+
if(prelen == 0 || inlen == 0) return NULL;
17+
return newTree(preorder, inorder, 0, inlen, 0);
18+
}
19+
TreeNode *newTree(vector<int> &preorder, vector<int> &inorder, int inst, int inend, int prest){
20+
if(inst > inend) return NULL;
21+
TreeNode *node = new TreeNode(preorder[prest]);
22+
int pos = -1;
23+
for(int i = 0; i <= inorder.size(); i++){
24+
if(inorder[i] == preorder[prest]){
25+
pos = i;
26+
break;
27+
}
28+
}
29+
node -> left = newTree(preorder, inorder, inst, pos -1, prest + 1); // the second root is prest + 1
30+
node -> right = newTree(preorder, inorder, pos + 1, inend, prest + 1 + pos - inst); // mid - inst is the size of left side
31+
return node;
32+
}
33+
};

Unique Binary Search Trees II.cpp

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
//Unique Binary Search Trees II
2+
// recursion generate the tree ( left, right)
3+
// the same way as the last question
4+
5+
//**
6+
* Definition for binary tree
7+
* struct TreeNode {
8+
* int val;
9+
* TreeNode *left;
10+
* TreeNode *right;
11+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
12+
* };
13+
*/
14+
class Solution {
15+
public:
16+
vector<TreeNode *> generateTrees(int n) {
17+
if( n == 0) return generate(1, 0);
18+
return generate(1, n);
19+
}
20+
21+
vector<TreeNode *>generate(int start, int end){
22+
vector<TreeNode *> result;
23+
if( start > end){
24+
result.push_back(NULL);
25+
return result;
26+
}
27+
for(int k = start; k <= end; k++){
28+
vector<TreeNode *> l = generate(start, k- 1);
29+
vector<TreeNode *> r = generate(k + 1, end);
30+
for(auto i : l){
31+
for(auto j : r){
32+
TreeNode *subnode = new TreeNode(k);
33+
subnode -> left = i;
34+
subnode -> right = j;
35+
result.push_back(subnode);
36+
}
37+
}
38+
}
39+
return result;
40+
}
41+
};

0 commit comments

Comments
 (0)