Convert Sorted List to Binary Search Tree

来源:互联网 发布:php 微商城平台版源码 编辑:程序博客网 时间:2024/06/03 18:20

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

时间复杂度O(n log(n))

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; *//** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    /*convert [head,tail)*/        TreeNode *sortedListToBST(ListNode *head, ListNode *tail){        if(head==tail) return NULL;        if(head->next==tail){            TreeNode *res = new TreeNode(head->val);            delete head;             return res;        }                if(head->next->next==tail){            TreeNode* res = new TreeNode(head->next->val);            TreeNode* left = new TreeNode(head->val);            res->left = left; res->right = NULL;            delete head->next; delete head;             return res;        }                ListNode *fast = head, *slow = head;        while(fast!=tail && fast->next!=tail){            fast = fast->next->next;            slow = slow->next;        }                TreeNode *res = new TreeNode(slow->val);        TreeNode *left = sortedListToBST(head,slow);        TreeNode *right = sortedListToBST(slow->next,tail);        delete slow;        res->left = left; res->right = right;                return res;    }        TreeNode *sortedListToBST(ListNode *head) {        return sortedListToBST(head,NULL);    }};


0 0