刷题专栏(七):将有序数组转换为二叉搜索树

简介: 刷题专栏(七):将有序数组转换为二叉搜索树

前言

今天我们继续来刷题,《将有序数组转换为二叉搜索树》题目难度级别为简单,

image.png

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

从题目的描述中,我们可以初步判断出最后想要得到的结果是一个二叉树,是由一个升序整数数组来转化而成的。

也就是最后要得到一个层级平衡的二叉树,比如题目中给的示例,如果是五个元素,那么最多是三级,一旦超过四级,这个二叉树左右就不再平均了;也就不满足最后我们所需要的结果了。

但是这里有一个需要注意的点,那就是提供的一定是一个升序数组,所以我们就可以采用二分法来给二叉树的左右两个分叉分配元素数量。

还有一个点,那就是最后的预期结果可能会是多种,所以这道题在很多情况下没有固定答案,只能判断二叉树是否够平均即可。

代码展示

我本次执行的代码如下:采用的二分法和递归来处理和生成符合要求的二叉树结构。

public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.sortedArrayToBST(new int[]{-10,-3,0,5,9}));
    }
    public TreeNode sortedArrayToBST(int[] nums) {
        return a(nums, 0, nums.length - 1);
    }
    private TreeNode a(int[] nums, int l, int r) {
        if (l > r) {
            return null;
        }
        int z = l + (r - l) / 2;
        TreeNode root = new TreeNode(nums[z]);
        root.left = a(nums, l, z - 1);
        root.right = a(nums, z + 1, r);
        return root;
    }
}

执行结果

逢二叉树,必递归。

这次的递归表现挺好的,排名很理想。

image.png

总结

连着做了好几天的二叉树题目,对这个数据结构已经比较熟悉了,大家有什么心得没有,可以评论区见。

目录
相关文章
|
2月前
|
算法 索引
【数据结构与算法 | 基础篇】力扣704/35/34:二分查找
【数据结构与算法 | 基础篇】力扣704/35/34:二分查找
|
2月前
|
算法
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)(下)
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)
13 1
|
2月前
|
算法 C++
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)(上)
数据结构与算法⑮(第四章_下)二叉树OJ(力扣:144,965,104,110,226,100,101,572)
11 1
|
2月前
|
存储 Java
JAVA数据结构刷题 -- 力扣二叉树
JAVA数据结构刷题 -- 力扣二叉树
32 0
|
2月前
|
算法
六六力扣刷题二叉树之迭代遍历
六六力扣刷题二叉树之迭代遍历
41 0
|
机器学习/深度学习 算法 Java
代码随想录训练营day41| 343. 整数拆分 96.不同的二叉搜索树
代码随想录训练营day41| 343. 整数拆分 96.不同的二叉搜索树
|
算法 Java 测试技术
Leetcode刷题笔记:二分查找算法
LeetCode 对于数组查询算法之一的二分查找算法的简单认识。
83 0
代码随想录刷题|LeetCode 343. 整数拆分 96.不同的二叉搜索树
代码随想录刷题|LeetCode 343. 整数拆分 96.不同的二叉搜索树
代码随想录刷题|LeetCode 343. 整数拆分 96.不同的二叉搜索树