@@ -13,26 +13,29 @@ struct TreeNode {
1313 struct TreeNode * right ;
1414};
1515
16- static struct TreeNode * dfs (int * nums , int lo , int hi )
16+ static struct TreeNode * dfs (struct ListNode * * head , int lo , int hi )
1717{
18+ if (lo > hi ) {
19+ return NULL ;
20+ }
21+
1822 int mid = lo + (hi - lo ) / 2 ;
1923 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 );
2328 return node ;
2429}
2530
26- static struct TreeNode * sortedListToBST (struct ListNode * head )
31+ static struct TreeNode * sortedListToBST (struct ListNode * head )
2732{
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 ++ ;
3437 }
35- return traverse ( nums , 0 , i - 1 );
38+ return dfs ( & head , 0 , len - 1 );
3639}
3740
3841int main (int argc , char * * argv )
0 commit comments