109. Convert Sorted List to Binary Search Tree

来源:互联网 发布:全站仪数据采集 编辑:程序博客网 时间:2024/05/28 06:07

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

思路:一种解法用快慢指针找中点,然后分割成两段再递归调用。

http://www.cnblogs.com/grandyang/p/4295618.html

另一种解法把listnode转成数组,然后用数组构建BST就和前面一题一样了。

http://www.2cto.com/kf/201311/255348.html

第三种解法O(n)的时间复杂度,从最左下角的节点开始build tree,就是从ListNode的头节点往后扫描build,用中序遍历的过程来buidl这个tree。具体自己写一个例子跟一下可能理解的更多些。

class Solution {public:    TreeNode* sortedListToBST(ListNode* head) {        if(head == NULL) return NULL;        int length = 0;        ListNode *tmp = head;        while(tmp!=NULL)        {            tmp = tmp->next;            length++;        }                return buildBST(head,0,length-1);    }        TreeNode* buildBST(ListNode *&head, int low, int high)    {        if(low > high) return NULL;        int mid = low + (high - low)/2;        TreeNode *left = buildBST(head, low, mid-1);        TreeNode *root = new TreeNode(head->val);        head = head->next;        root->left = left;        TreeNode *right = buildBST(head,mid+1,high);        root->right = right;                return root;    }};


0 0
原创粉丝点击