Convert Sorted List to Binary Search Tree

来源:互联网 发布:两组数据差值的标准差 编辑:程序博客网 时间:2024/06/02 00:34
/** * 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 {private:    vector<ListNode*> ptrs;    void buildTree(int start,int end,TreeNode* &parent)    {        if(start>=end)        {            return;        }        int mid=start+(end-start)/2;        TreeNode* child=new TreeNode(ptrs[mid]->val);        parent=child;        buildTree(start,mid,child->left);        buildTree(mid+1,end,child->right);    }public:    TreeNode *sortedListToBST(ListNode *head) {        while(head){            ptrs.push_back(head);            head=head->next;        }        if(ptrs.size()==0)        {            return NULL;        }        int mid=ptrs.size()/2;        TreeNode* root=new TreeNode(ptrs[mid]->val);        buildTree(0,mid,root->left);        buildTree(mid+1,ptrs.size(),root->right);        return root;    }};

0 0