Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 6de6ce5

Browse files
Improvement
Signed-off-by: begeekmyfriend <begeekmyfriend@gmail.com>
1 parent eaa232d commit 6de6ce5

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

0109_convert_sorted_list_to_binary_search_tree/bst_convert.c

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

3841
int main(int argc, char **argv)

0 commit comments

Comments
 (0)