Skip to content

Commit 53b34c6

Browse files
committed
2
1 parent 80dc18a commit 53b34c6

File tree

2 files changed

+94
-0
lines changed

2 files changed

+94
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* Definition for binary tree
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
TreeNode *buildTree(vector<int>& inorder, vector<int>& postorder) {
13+
// Start typing your C/C++ solution below
14+
// DO NOT write int main() function
15+
16+
int size = inorder.size();
17+
if (size == 0) return NULL;
18+
19+
TreeNode *root = new TreeNode(0);
20+
build(root, size, inorder, 0, postorder, 0);
21+
return root;
22+
}
23+
24+
void build(TreeNode *root, int size, vector<int>& inorder, int inLeft, vector<int>& postorder, int postLeft) {
25+
assert(size > 0);
26+
27+
int pivot = postorder[postLeft+size-1];
28+
root->val = pivot;
29+
30+
if (size == 1) return;
31+
32+
int sizeleft = 0;
33+
for (int i = 0; i < size; i++) {
34+
if (inorder[inLeft+i] == pivot)
35+
break;
36+
sizeleft += 1;
37+
}
38+
39+
if (sizeleft > 0) {
40+
root->left = new TreeNode(0);
41+
build(root->left, sizeleft, inorder, inLeft, postorder, postLeft);
42+
}
43+
int sizeright = size - sizeleft - 1;
44+
if (sizeright > 0) {
45+
root->right = new TreeNode(0);
46+
build(root->right, sizeright, inorder, inLeft + sizeleft + 1, postorder, postLeft + sizeleft);
47+
}
48+
}
49+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* Definition for binary tree
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
TreeNode *buildTree(vector<int>& preorder, vector<int>& inorder) {
13+
// Start typing your C/C++ solution below
14+
// DO NOT write int main() function
15+
16+
if (preorder.empty()) return NULL;
17+
18+
TreeNode *root = new TreeNode(0);
19+
build(root, preorder.size(), preorder, 0, inorder, 0);
20+
return root;
21+
}
22+
23+
void build(TreeNode *root, int size, vector<int>& preorder, int preLeft, vector<int>& inorder, int inLeft) {
24+
if (size == 1) {
25+
root->val = preorder[preLeft];
26+
return ;
27+
}
28+
int sizeLeft = 0;
29+
for (int i = 0; i < size; i++) {
30+
if (preorder[preLeft] == inorder[i+inLeft])
31+
break;
32+
sizeLeft += 1;
33+
}
34+
root->val = preorder[preLeft];
35+
if (sizeLeft > 0) {
36+
root->left = new TreeNode(0);
37+
build(root->left, sizeLeft, preorder, preLeft + 1, inorder, inLeft);
38+
}
39+
int sizeRight = size - sizeLeft - 1;
40+
if (sizeRight > 0) {
41+
root->right = new TreeNode(0);
42+
build(root->right, sizeRight, preorder, preLeft + sizeLeft + 1, inorder, inLeft + sizeLeft + 1);
43+
}
44+
}
45+
};

0 commit comments

Comments
 (0)