10
10
class Solution {
11
11
public:
12
12
TreeNode *sortedArrayToBST (vector<int > &num) {
13
- // Start typing your C/C++ solution below
14
- // DO NOT write int main() function
15
- if (num.empty ()) return NULL ;
16
- TreeNode *root = new TreeNode (0 );
17
- dfs (root, 0 , num.size () - 1 , num);
18
- return root;
19
-
13
+ return dfs (num, 0 , num.size () - 1 );
20
14
}
21
- void dfs (TreeNode *root, int left, int right, vector<int >& num) {
22
- if (left == right) {
23
- root->val = num[left];
24
- root->left = root->right = NULL ;
25
- return ;
15
+ TreeNode* dfs (vector<int >& num, int start, int limit) {
16
+ if (start > limit) {
17
+ return NULL ;
26
18
}
27
- int mid = (left + right) / 2 ;
28
- root->val = num[mid];
29
- root->right = new TreeNode (0 );
30
- dfs (root->right , mid + 1 , right, num);
31
- if (mid != left) {
32
- root->left = new TreeNode (0 );
33
- dfs (root->left , left, mid - 1 , num);
19
+ if (start == limit) {
20
+ return new TreeNode (num[start]);
34
21
}
22
+ int middle = (start + limit) / 2 ;
23
+ TreeNode* root = new TreeNode (num[middle]);
24
+ root->left = dfs (num, start, middle - 1 );
25
+ root->right = dfs (num, middle + 1 , limit);
26
+ return root;
35
27
}
36
- };
28
+ };
0 commit comments