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

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

前言

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

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

总结

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

目录
相关文章
|
5月前
|
算法 索引
六六力扣刷题数组之二分查找
六六力扣刷题数组之二分查找
34 0
|
5月前
|
算法
六六力扣刷题二叉树之迭代遍历
六六力扣刷题二叉树之迭代遍历
35 0
|
5月前
|
算法
六六力扣刷题数组之有序数组的平方
六六力扣刷题数组之有序数组的平方
28 0
|
8月前
|
存储 索引
【LeetCode】每日一题:链表部分经典题型
【LeetCode】每日一题:链表部分经典题型
35 0
|
11月前
|
算法 Java 测试技术
Leetcode刷题笔记:二分查找算法
LeetCode 对于数组查询算法之一的二分查找算法的简单认识。
76 0
|
12月前
|
算法 C++
【每日算法Day 76】经典面试题:中序遍历的下一个元素,5大解法汇总!
【每日算法Day 76】经典面试题:中序遍历的下一个元素,5大解法汇总!
|
算法 索引
数据结构与算法(七) 二分法
数据结构与算法(七) 二分法
52 0
代码随想录刷题|LeetCode 343. 整数拆分 96.不同的二叉搜索树
代码随想录刷题|LeetCode 343. 整数拆分 96.不同的二叉搜索树
代码随想录刷题|LeetCode 343. 整数拆分 96.不同的二叉搜索树
|
算法 搜索推荐
【数据结构与算法】:交换排序之快速排序(手绘图解+LeetCode原题)
快速排序是交换排序的一种,本质上快速排序就是采用“分而治之”的策略(分治法),将问题规模减小,再而对问题分别进行处理的排序算法。
101 0
【数据结构与算法】:交换排序之快速排序(手绘图解+LeetCode原题)