Leetcode109有序链表转换二叉搜索树

因为是升序的
所以利用快慢指针找到中间结点,将中间结点作为根节点
再递归左子树和右子树

TreeNode *sortedListToBST(ListNode *head)
{
	return buildTree(head,nullptr); 
}

TreeNode *buildTree(ListNode *head,ListNode *tail)
{
	if(head == tail) return nullptr;
	ListNode *slow = head, *fast = head;
	while(fast != tail && fast->next != tail)
	{
		slow = slow->next;
		fast = fast->next->next;
	}
	TreeNode *root = new TreeNode(slow->val);
	root->left = buildTree(head,slow);
	root->right = buildTree(slow->next,tail);
	return root;
}
posted @ 2020-07-12 20:13  Akmf's_blog  阅读(54)  评论(0)    收藏  举报