@@ -13,26 +13,29 @@ struct TreeNode {
13
13
struct TreeNode * right ;
14
14
};
15
15
16
- static struct TreeNode * dfs (int * nums , int lo , int hi )
16
+ static struct TreeNode * dfs (struct ListNode * * head , int lo , int hi )
17
17
{
18
+ if (lo > hi ) {
19
+ return NULL ;
20
+ }
21
+
18
22
int mid = lo + (hi - lo ) / 2 ;
19
23
struct TreeNode * node = malloc (sizeof (* node ));
20
- node -> val = nums [mid ];
21
- node -> left = mid > lo ? dfs (nums , lo , mid - 1 ) : NULL ;
22
- node -> right = mid < hi ? dfs (nums , mid + 1 , hi ) : NULL ;
24
+ node -> left = dfs (head , lo , mid - 1 );
25
+ node -> val = (* head )-> val ;
26
+ (* head ) = (* head )-> next ;
27
+ node -> right = dfs (head , mid + 1 , hi );
23
28
return node ;
24
29
}
25
30
26
- static struct TreeNode * sortedListToBST (struct ListNode * head )
31
+ static struct TreeNode * sortedListToBST (struct ListNode * head )
27
32
{
28
- int i , nums [10000 ];
29
- for (i = 0 ; head != NULL ; head = head -> next , i ++ ) {
30
- nums [i ] = head -> val ;
31
- }
32
- if (i == 0 ) {
33
- return NULL ;
33
+ struct ListNode * p ;
34
+ int len = 0 ;
35
+ for (p = head ; p != NULL ; p = p -> next ) {
36
+ len ++ ;
34
37
}
35
- return traverse ( nums , 0 , i - 1 );
38
+ return dfs ( & head , 0 , len - 1 );
36
39
}
37
40
38
41
int main (int argc , char * * argv )
0 commit comments