Skip to content

Commit 975a101

Browse files
authored
Merge pull request gzc426#354 from GatesMa/patch-15
Create GatesMa.md
2 parents 41e306c + 2d815f5 commit 975a101

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

2018.12.08-leetcode105/GatesMa.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# c++
2+
```cpp
3+
/**
4+
* Definition for a binary tree node.
5+
* struct TreeNode {
6+
* int val;
7+
* TreeNode *left;
8+
* TreeNode *right;
9+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
10+
* };
11+
*/
12+
class Solution {
13+
public:
14+
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
15+
return buildTree(preorder, inorder, 0, preorder.size()-1, 0, inorder.size()-1);
16+
}
17+
18+
/**重载这个函数*/
19+
//表示 前序为preorder,从下标p_l到p_r,中序为inorder,下标从i_l到i_r构建 树
20+
TreeNode* buildTree(vector<int>& preorder, vector<int> inorder, int p_l, int p_r, int i_l, int i_r) {
21+
if(p_l > p_r) return NULL;
22+
if(p_l == p_r) return new TreeNode(preorder[p_l]);
23+
int index = find(inorder, i_l, i_r, preorder[p_l]);//根节点在中序遍历中的位置
24+
TreeNode* node = new TreeNode(preorder[p_l]);
25+
int pre_left_len = index - i_l;//左子树的长度
26+
// preorder[p_lo+1 ... p_lo+pre_left_len]是先序数组中与现结点左子树对应的部分。
27+
// inorder[i_lo ... index_in-1]是中序数组中与现结点左子树对应的部分。
28+
node->left = buildTree(preorder, inorder, p_l+1, p_l+pre_left_len, i_l, index - 1);
29+
node->right = buildTree(preorder, inorder, p_l+pre_left_len+1, p_r, index+1, i_r);
30+
return node;
31+
}
32+
33+
int find(vector<int>& inorder, int l, int r, int node_val) {
34+
for(int i =l;i <= r;i++){
35+
if(inorder[i] == node_val) return i;
36+
}
37+
return -1;
38+
}
39+
};
40+
```

0 commit comments

Comments
 (0)