LeetCode:Convert Sorted List to Binary Search Tr

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;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章