Leetcode Convert Sorted List to Binary Search Tree

Convert Sorted List to Binary Search Tree

  Total Accepted: 6119  Total Submissions: 22895 My Submissions

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


二分法和中序遍历二叉树的高级结合应用。综合难度指数五星级。

难点:

1 如何设计二分法的结束条件?

2 如何中序先构造左子树,然后构造根节点,然后是右子树?

3 如何确定根节点?

4 如何返回节点,如何确定返回的节点是左子树还是右子树?

5 什么时候递归?

好多问题的一个算法设计,但是只要理解透切了,一切问题都可以归结为几行简单的代码。

这也叫做编程之美。

//2014-2-16 update
	TreeNode *sortedListToBST(ListNode *head) 
	{
		int n = getLength(head);
		return toBST(head, 0, n-1);
	}
	int getLength(ListNode *h)
	{
		int n = 0;
		for ( ; h; n++) h = h->next;
		return n;
	}
	TreeNode *toBST(ListNode *&h, int low, int up)
	{
		if (low > up) return nullptr;
		int m = low + ((up-low)>>1);

		TreeNode *lt = toBST(h, low, m-1);
		TreeNode *r = new TreeNode(h->val);
		h = h->next;
		r->left = lt;
		r->right = toBST(h, m+1, up);
		return r;		
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值