【算法】(简单题)力扣NO.108二叉树算法题——相同的树将有序数组转换为二叉搜索树


题目

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
在这里插入图片描述


题目补充

高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
二叉搜索树(二叉排序树 / 二叉查找树):如果树不为空的情况下需要满足以下条件

  • 非空左子树的所有键值小于其根结点的键值。
  • 非空右子树的所有键值大于其根结点的键值。
  • 左、右子树都是二叉搜索树。

思路

在遍历二叉搜索树的时候,如果是中序遍历,得到的序列就是递增有序的。
所以这道题就是根据有序序列来回复一个二叉搜索树。
但是题目要求 高平衡
可以看下面的图:在这里插入图片描述
三棵树的都是二叉搜素树,三棵树的中序遍历都是 1 2 3 4 5,但是都符合题意吗?
答案是否定的。
如何保证得到的是高平衡的二叉搜索树呢?我们需要定义这棵二叉搜索树的根节点是有序序列的 中间值


代码实现

    /**
     * 二叉搜索树
     * @param nums
     * @return
     */
    public TreeNode sortedArrayToBST(int[] nums) {
        return mid_sort(nums,0,nums.length-1); //调用递归
    }

    /**
     * 二叉搜索树 递归方法
     * @param nums 有序数组
     * @param low 数组最小值下标
     * @param hight 数组最大值下标
     * @return
     */
    public TreeNode mid_sort(int[] nums,int low,int hight){
        if(low > hight){ //递归结束条件 最小值下标大于最大值下标
            return null;
        }
        int mid = low + (hight - low)/2; //计算中间值下标(防计算越界)
        TreeNode root = new TreeNode(nums[mid]); //创建二叉搜索树节点为中间值
        root.left = mid_sort(nums,low,mid - 1);  //递归创建左子树
        root.right = mid_sort(nums,mid + 1,hight); //递归创建右子树
        return root;
    }

总结

主要理解了二叉树创建的过程,加深了递归的理解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值