首页 > 代码库 > [LeetCode] Convert Sorted List to Binary Search Tree(分治)

[LeetCode] Convert Sorted List to Binary Search Tree(分治)

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

方法:为了使BST高度平衡,要找链表中的中值作为当前根节点。

/** * 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:    TreeNode *sortedListToBST(ListNode *head) {        if(head==NULL)            return NULL;        ListNode *pmid = FindMid(head);        TreeNode *root = new TreeNode(pmid->val);        if(pmid != head)           root->left = sortedListToBST(head);        root->right = sortedListToBST(pmid->next);        return root;    }private:    ListNode *FindMid(ListNode *head){//找中间结点        if(head->next==NULL)            return head;        ListNode *Pmid=head,*p=head,*Pmin_pre = head;        while(p!=NULL && p->next != NULL)        {           p = p->next;           p = p->next;           Pmin_pre = Pmid;           Pmid = Pmid->next;        }//end while;        Pmin_pre->next = NULL;        return Pmid;     }};