给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树
样例:
#ifndef C106_H
#define C106_H
#include<iostream>
using namespace std;
class TreeNode{
public:
int val;
TreeNode *left, *right;
TreeNode(int val){
this->val = val;
this->left = this->right = NULL;
}
};
class ListNode{
public:
int val;
ListNode *next;
ListNode(int val){
this->val = val;
this->next = NULL;
}
};
class Solution {
public:
/**
* @param head: The first node of linked list.
* @return: a tree node
*/
TreeNode *sortedListToBST(ListNode *head) {
// write your code here
if (head == NULL)
return NULL;
ListNode *dummy = new ListNode(-1);
dummy->next = head;
ListNode *fast = head, *slow = dummy;
while (fast != NULL&&fast->next != NULL)
{
slow = slow->next;
fast = fast->next->next;
}
TreeNode *root = new TreeNode(slow->next->val);
ListNode *second = slow->next->next;
slow->next = NULL;
ListNode *first = dummy->next;
root->left = sortedListToBST(first);
root->right = sortedListToBST(second);
return root;
}
};
#endif