生成高度平衡的二叉搜索树

生成高度平衡二叉搜索树

一、算法描述

       给定一个数组,如何以数组中的元素生成二叉搜索树?要解决这个问题首先我们需要理解二叉搜索树的定义:
1.节点的左子树只包含小于当前节点的数。
2.节点的右子树只包含大于当前节点的数
3.所有左子树和右子树自身必须也是二叉搜索树。
       从二叉搜索树的定义可以看出,其构成是含有递归的思想,所以从代码的实现上可以通过递归左右子树来实现。平衡搜索二叉树是指在二叉搜索树的接触上左右子树的高度差不超过1。
       以一个例子来解释:给定数组 [-10,-3,0,5,9],基于这个升序数组生成平衡的二叉搜索树,结果如下所示:
在这里插入图片描述
在这里插入图片描述
       给定二叉搜索树,通过中序遍历就可以得到升序数组,反过来,当给定升序数组,就可以按照中序遍历的方式获得二叉搜索树。

二、JAVA 实现

public TreeNode sortedArrayToBST(int[] nums) {
        return backsortedArrayToBST(nums,0,nums.length-1);

    }
    public TreeNode backsortedArrayToBST(int[]  nums,int left,int right){
        if (left>right)
            return null;

        int index=(left+right)/2;
        TreeNode node=new TreeNode(nums[index]);
        node.left=backsortedArrayToBST(nums,left,index-1);
        node.right=backsortedArrayToBST(nums,index+1,right);

        return node;

    }

总结

       在对进行操作的时候,递归是一种可能的较为高效的解决方案,这是由树本身的定义决定的(左右子节点相对于下一层节点也是父节点)。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值