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.

/**

 * 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) 

    {

        int size=0;

        ListNode* p=head;

        while(p!=NULL) 

        {

            size++;

            p=p->next;

        }

        return generate(head,size);

    }

    

    TreeNode* generate(ListNode* head,int size)

    {

        if(head==NULL || size==0) return NULL;

        

        int index=(size+1)/2;

        ListNode* p=head;

        for(int i=1;i<index;i++) p=p->next;

        TreeNode* root=new TreeNode(p->val);

        

        root->left=generate(head,index-1);

        root->right=generate(p->next,size-index);

        

        return root;

    }

};

 

你可能感兴趣的:(Binary search)