[LeetCode] 109. Convert Sorted List to Binary Search Tree

来源:互联网 发布:单身生活 知乎 编辑:程序博客网 时间:2024/06/05 11:56

思路:
这题很有趣, 因为数据存储的结构是链表, 所以为了避免每次都从头访问元素, 我们用一个全局变量temp存储我们当前应该访问的链表节点. 所以思路是先计算一下链表的大小, 然后进行递归, 先单独处理左子树, 然后每次添加左边树节点结束后, 要把全局变量temp向后挪一位, 这样左子树都遍历完了以后temp也会停到root的位置了, 然后遍历后面的元素. 这个方法很巧妙, 来源自https://discuss.leetcode.com/topic/8141/share-my-o-1-space-and-o-n-time-java-code.

TreeNode* helper(ListNode*& temp, int start, int end) {    if (start > end)        return NULL;    int mid = (start + end + 1) >> 1;    TreeNode* left = helper(temp, start, mid - 1);    TreeNode* root = new TreeNode(temp->val);    temp = temp->next;    root->left = left;    root->right = helper(temp, mid + 1, end);    return root;}TreeNode* sortedListToBST(ListNode* head) {    int size = 0;    ListNode* temp = head;    while (temp) {        size++;        temp = temp->next;    }    temp = head;    return helper(temp, 0, size - 1);}
0 0
原创粉丝点击