Create Balanced Binary Search Tree from Sorted linked list

后端 未结 11 1771
囚心锁ツ
囚心锁ツ 2020-12-07 16:48

What\'s the best way to create a balanced binary search tree from a sorted singly linked list?

11条回答
  •  臣服心动
    2020-12-07 17:47

    A slightly improved implementation from @1337c0d3r in my blog.

    // create a balanced BST using @len elements starting from @head & move @head forward by @len
    TreeNode *sortedListToBSTHelper(ListNode *&head, int len) {
        if (0 == len)   return NULL;
    
        auto left = sortedListToBSTHelper(head, len / 2);
        auto root = new TreeNode(head->val);
        root->left = left;
        head = head->next;
        root->right = sortedListToBSTHelper(head, (len - 1) / 2);
        return root;
    }
    
    TreeNode *sortedListToBST(ListNode *head) {
        int n = length(head);
        return sortedListToBSTHelper(head, n);
    }
    

提交回复
热议问题