Given a singly linked list where elements are sorted in ascending order, convert it to a height bala

将一个顺序链表转换成一棵二叉树

利用快慢指针,快指针比满指针每次多走一步

slow = slow->next;

fast = fast->next->next;

快指针走到尾,满指针走到中间点,中间点作为二叉树的根节点root,

root前的节点为左子树,root后的节点为右子树,递归

TreeNode* BST(ListNode* head, ListNode* tail)
{
	if (head == tail)
		return NULL;

	ListNode* slow = head;
	ListNode* fast = head;
	while (fast != tail && fast->next != tail)
	{
		slow = slow->next;
		fast = fast->next->next;
	}

	if (fast->next != tail)
	{
		slow = slow->next;
	}

	TreeNode* root = new TreeNode(slow->val);
	root->left = BST(head, slow);
	root->right = BST(slow->next, tail);
	return root;
}
TreeNode* sortedListToBST(ListNode *head)
{
	if (head == NULL)
		return NULL;
	else
		return BST(head, NULL);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值