Skip to content

Commit 6328215

Browse files
committed
Time: 10 ms (32.86%), Space: 13.6 MB (84.98%) - LeetHub
1 parent 698be3e commit 6328215

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
8+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10+
* };
11+
*/
12+
class Solution {
13+
public:
14+
TreeNode* solve(vector<int>& preorder, int s, int e)
15+
{
16+
if(s>e or e>preorder.size()) return NULL;
17+
TreeNode* root = new TreeNode(preorder[s]);
18+
if(s==e)
19+
return root;
20+
TreeNode *left=NULL,*right=NULL;
21+
int idx = upper_bound(preorder.begin()+s,preorder.begin()+e+1,root->val) - preorder.begin();
22+
left = solve(preorder,s+1,idx-1);
23+
right = solve(preorder,idx,e);
24+
root->left = left;
25+
root->right = right;
26+
return root;
27+
}
28+
TreeNode* bstFromPreorder(vector<int>& preorder) {
29+
return solve(preorder,0,preorder.size()-1);
30+
}
31+
};

0 commit comments

Comments
 (0)