leetcode108题:将有序数组转换为二叉搜索树

 题目要求的是高度平衡的二叉搜索树,故每个节点应该取所在区间的中间节点。就跟二分查找一样。首先用整个数字的中间位置(下标基座mid)的数生成根结点root,然后找mid左边即0到mid-1的中间位置的元素生成root的左子节点,mid右边的即mid+1到len中间的生成root的右子节点,并在每一次区中间元素时修改区间范围。以此类推,递归即可。

class Solution {
  public TreeNode sortedArrayToBST(int[] nums) {
        int len = nums.length;
        return fun(nums,0,len-1);
    }
	public TreeNode fun(int[] arr,int from,int to){
		if(from==to)
			return new TreeNode(arr[from]);
		if(from>to){
			return null;
		}
		int mid = (from+to)>>1;
		TreeNode root = new TreeNode(arr[mid]);
		root.left = fun(arr,from,mid-1);
		root.right = fun(arr,mid+1,to);
		return root;
	}
}

要注意的是,第二个终止条件,即from>to。这个条件写不好会导致栈溢出(相当于进入死循环)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值