LeetCode Convert Sorted List to Binary Search Tree

来源:互联网 发布:数据挖掘与r语言 代码 编辑:程序博客网 时间:2024/06/07 14:50

题目

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 *innerLTB(ListNode *&head,int begin,int end)//头,指针的引用,不断修改使在root使用时指向中间位置;头尾{if(begin>=end)return NULL;int mid=(begin+end)/2;//求中间位置TreeNode *left=innerLTB(head,begin,mid);//递归求左子树,由底向上TreeNode *root=new TreeNode(head->val);//构建中间节点root->left=left;head=head->next;//每次构建后链指针后移TreeNode *right=innerLTB(head,mid+1,end);//递归求右子树的节点root->right=right;return root;}    TreeNode *sortedListToBST(ListNode *head) {        int len=0;//求长度ListNode *h=head;while(h!=NULL){h=h->next;len++;}return innerLTB(head,0,len);    }};


 

 

0 0