题目
Thoughts
题目要求需要变换成一个高度平衡的二叉树,也就是两边子树的高度差不能超过1;
且链表序列本身是升序的,根据高度平衡二叉树的概念及题目的要求,可以把利用二分式构建此二叉树
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
/**
* Definition for a binary tree node.
* 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) return NULL;
int size = getListSize(head);
return convert(head,size);
}
int getListSize(ListNode* head){
if(!head) return 0;
ListNode* p = head;
int num = 0;
while(p){
num++;
p = p->next;
}
return num;
}
TreeNode* convert(ListNode* head,int size){
ListNode* temp = head;
if(size == 0) return NULL;
for(int i = 0;i<(size/2);i++){
temp = temp->next;
}
TreeNode* p = new TreeNode(0);
p->left = convert(head,size/2);
p->val = temp->val;
p->right = convert(temp->next,size-size/2-1);
return p;
}
};