【convert-sorted-list-to-binary-search-tree】

排序链表转平衡BST
本文介绍了一种将已排序的单链表转换为高度平衡的二叉搜索树的方法。利用快慢指针技巧找到链表中点作为树的根节点,并通过递归方式构建左右子树。

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)
	{
		if (head==NULL)
		{
			return NULL;
		}

		//用快慢指针来找中间节点
		ListNode* slow = head;
		ListNode* fast = head;
		ListNode* preSlow = NULL;

		while (fast!=NULL && fast->next!=NULL)
		{
			preSlow = slow;
			slow = slow->next;
			fast = fast->next->next;
		}

		TreeNode* mid = new TreeNode(slow->val);
		//分别递归左右部分
		if (preSlow!=NULL)
		{
			preSlow->next = NULL;
			mid->left = sortedListToBST(head);
		}

		if (slow->next!=NULL)
		{
			mid->right = sortedListToBST(slow->next);
		}

		return mid;
	}
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值