给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定的有序链表: [-10, -3, 0, 5, 9],
一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
class Solution {
public:
TreeNode* sortedListToBST(ListNode* head) {
if(head==NULL)return NULL;
return helper(head,NULL);
}
TreeNode* helper(ListNode* head,ListNode* tail)
{
if(head==NULL||head==tail)return NULL;
ListNode* slow=head;
ListNode* fast=head;
while(fast->next!=tail&&fast->next->next!=tail)
{
fast=fast->next->next;//快指针移动
slow=slow->next;//慢指针移动
}
//TreeNode* current=slow->val;
TreeNode* current=new TreeNode(slow->val);
current->left=helper(head,slow);
current->right=helper(slow->next,tail);
return current;
}
};
273



被折叠的 条评论
为什么被折叠?



