Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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(structListNode**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)

AltStyle によって変換されたページ (->オリジナル) /