leetcode-109. 有序链表转换二叉搜索树
题目:
代码:
#include <iostream>
#include <vector>
using namespace std;
typedef struct ListNode{
int val;
struct ListNode *next;
}ListNode,*LinkList;
struct TreeNode{
int val;
TreeNode *left,*right;
};
void createList(LinkList &L,int n){
L=new ListNode;
L->next=NULL;
ListNode *r=L;
for(int i=0;i<n;i++){
ListNode *p = new ListNode;
cin>>p->val;
p->next=NULL;
r->next=p;
r=p;
}
}
vector<int> getNums(ListNode *head){
vector<int> nums;
ListNode *h=head->next;
while(h){
nums.push_back(h->val);
h=h->next;
}
return nums;
}
TreeNode* getTree(vector<int>& nums,int left,int right){
if(left>right){
return NULL;
}
int mid=(left+right)/2;
TreeNode *root=new TreeNode;
root->val=nums[mid];
root->left=getTree(nums,left,mid-1);
root->right=getTree(nums,mid+1,right);
return root;
}
TreeNode* sortedListToBST(ListNode* head) {
vector<int> nums;
nums=getNums(head);
return getTree(nums,0,nums.size()-1);
}
int main(){
TreeNode* res;
ListNode* head;
res=sortedListToBST(head);
return 0;
}