1. 程式人生 > >有序單向連結串列轉換為平衡搜尋二叉樹

有序單向連結串列轉換為平衡搜尋二叉樹

class BSTNode
{
	public:
		BSTNode(int v)
		{
			value = v;
			left = NULL;
			right = NULL;
		}
		int value;
		BSTNode *left;
		BSTNode *right;
};

class ListNode
{
	public:
		ListNode(int v)
		{
			value = v;
			left = NULL;
			right = NULL;
		}

		int value;
		ListNode *left;
		ListNode *right;
};


BSTNode* sortedListToBST(ListNode* &list, int left, int right)
{
	if (left > right)
	{
		return NULL;
	}
	
	int mid = left + (right-left)/2;
	BSTNode *left = sortedListToBST(list, left, mid-1);
	BSTNode *parent = new BSTNode(list->value);
	parent->left = left;
	list = list->next;
	BSTNode *right = sortedListToBST(list, mid+1, right);
	parent->right = right;
	return parent;
}

BSTNode* sortedListToBST(ListNode *list, int n)
{
	return sortedArrayToBST(list, 0, n-1);
}