@@ -25,21 +25,16 @@ class Solution {
25
25
public:
26
26
TreeNode *buildTree (vector<int > &inorder, vector<int > &postorder) {
27
27
int N = inorder.size ();
28
- return buildTreeRe (inorder, 0 , N, postorder, 0 , N);
28
+ return buildTreeRe (inorder. begin (), postorder. begin () , N);
29
29
}
30
30
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) {
34
32
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 );
43
38
return root;
44
39
}
45
40
};
0 commit comments