Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
=======================================================
题目链接:https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/
题目大意:给定一个排序链表,用它来构建一棵平衡二叉树。
思路:递归构建。
1、计算当前链表长度num。
2、取出第num/2个节点作为头结点,其左边为左子树,右边为右子树。
注意点:使用preNode记录root对应节点temp的前一个节点,递归时候preNode->next = NULL 。
参考代码:
/**
* 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 == NULL )
return NULL ;
int num = 0 ;
ListNode* temp = head ;
while ( temp )
{
num ++ ;
temp = temp -> next ;
}
ListNode* preNode = head ;
temp = head ;
for ( int i = 0 ; i < num / 2 ; i ++ )
{
preNode = temp ;
temp = temp -> next ;
}
if ( temp == head )
head = NULL ;
else
preNode -> next = NULL ;
TreeNode * root = new TreeNode ( temp -> val ) ;
root -> left = sortedListToBST ( head ) ;
root -> right = sortedListToBST ( temp -> next ) ;
return root ;
}
};