Skip to content

Commit c8d930f

Browse files
committed
Update: Simplify parameters.
1 parent 06df7ef commit c8d930f

File tree

2 files changed

+14
-25
lines changed

2 files changed

+14
-25
lines changed

ConstructBinaryTreefromInorderandPostorderTraversal.h

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,16 @@ class Solution {
2525
public:
2626
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
2727
int N = inorder.size();
28-
return buildTreeRe(inorder, 0, N, postorder, 0, N);
28+
return buildTreeRe(inorder.begin(), postorder.begin(), N);
2929
}
3030

31-
TreeNode *buildTreeRe(vector<int> &inorder, int in_s, int in_e,
32-
vector<int> &postorder, int post_s, int post_e) {
33-
int N = in_e - in_s;
31+
TreeNode *buildTreeRe(vector<int>::iterator inorder, vector<int>::iterator postorder, int N) {
3432
if (N <= 0) return NULL;
35-
int pos = 0;
36-
while (pos < N && inorder[in_s + pos] != postorder[post_e-1]) pos++;
37-
38-
TreeNode *root = new TreeNode(postorder[post_e-1]);
39-
root->left = buildTreeRe(inorder, in_s, in_s + pos,
40-
postorder, post_s, post_s + pos);
41-
root->right = buildTreeRe(inorder, in_s + pos + 1, in_e,
42-
postorder, post_s + pos, post_e - 1);
33+
vector<int>::iterator it = find(inorder, inorder+N, *(postorder+N-1));
34+
int pos = it - inorder;
35+
TreeNode *root = new TreeNode(*(postorder+N-1));
36+
root->left = buildTreeRe(inorder, postorder, pos);
37+
root->right = buildTreeRe(inorder+pos+1, postorder+pos, N-pos-1);
4338
return root;
4439
}
4540
};

ConstructBinaryTreefromPreorderandInorderTraversal.h

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,16 @@
2525
class Solution {
2626
public:
2727
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
28-
int N = inorder.size();
29-
return buildTreeRe(preorder, 0, N, inorder, 0, N);
28+
return buildTreeRe(preorder.begin(), inorder.begin(), preorder.size());
3029
}
3130

32-
TreeNode *buildTreeRe(vector<int> &preorder, int pre_s, int pre_e,
33-
vector<int> &inorder, int in_s, int in_e) {
34-
int N = in_e - in_s;
31+
TreeNode *buildTreeRe(vector<int>::iterator preorder, vector<int>::iterator inorder, int N) {
3532
if (N <= 0) return NULL;
36-
int pos = 0;
37-
while (pos < N && inorder[in_s + pos] != preorder[pre_s]) pos++;
38-
39-
TreeNode *root = new TreeNode(preorder[pre_s]);
40-
root->left = buildTreeRe(preorder, pre_s + 1, pre_s + 1 + pos,
41-
inorder, in_s, in_s + pos);
42-
root->right = buildTreeRe(preorder, pre_s + 1 + pos, pre_e,
43-
inorder, in_s + pos + 1, in_e);
33+
vector<int>::iterator it = find(inorder, inorder + N, *preorder);
34+
int pos = it - inorder;
35+
TreeNode *root = new TreeNode(*preorder);
36+
root->left = buildTreeRe(preorder+1, inorder, pos);
37+
root->right = buildTreeRe(preorder+1+pos, inorder+pos+1, N-1-pos);
4438
return root;
4539
}
4640
};

0 commit comments

Comments
 (0)