题目:
https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/
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 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* partition(ListNode* head,int len){
if(head==NULL || len<=0){
return NULL;
}
ListNode* left=head;
ListNode* right=head;
int partLen=len/2;
for(int i=1;i<=partLen;i++){
right=right->next;
}
TreeNode* treeNode=new TreeNode(right->val);
right=right->next;
TreeNode* leftChild=partition(left,partLen);
TreeNode* rightChild=partition(right,len-partLen-1);
treeNode->left=leftChild;
treeNode->right=rightChild;
return treeNode;
}
TreeNode* sortedListToBST(ListNode* head) {
int len=0;
if(head==NULL){
return NULL;
}
ListNode* p=head;
while(p!=NULL){
len++;
p=p->next;
}
return partition(head,len);
}
};