Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
給出一個單鏈表,結點是按元素遞增的順序排序,把鏈表轉換成高度平衡的二叉搜索樹
解題分析:
由於鏈表是按節結點的值遞增排序的,因此可以使用雙指針,一個快一個慢,遍歷到中間部分找到中間結點,然後使用分治法的思想,遞歸對鏈表的前半部分和後半部門進行建立。要注意遞歸的邊界出口。
代碼如下:
class Solution {
public:
TreeNode *sortedListToBST(ListNode *head)
{
return sortedListToBST( head, NULL );
}
private:
TreeNode *sortedListToBST(ListNode *head, ListNode *tail)
{
if( head == tail )
return NULL;
if( head->next == tail ) //
{
TreeNode *root = new TreeNode( head->val );
return root;
}
ListNode *mid = head, *temp = head;
while( temp != tail && temp->next != tail ) // 尋找中間節點
{
mid = mid->next;
temp = temp->next->next;
}
TreeNode *root = new TreeNode( mid->val );
root->left = sortedListToBST( head, mid );
root->right = sortedListToBST( mid->next, tail );
return root;
}
};