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

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

前言

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

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

总结

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

目录
相关文章
快排&超详细,Leetcode排序数组题目带你升华掌握(上)
快排&超详细,Leetcode排序数组题目带你升华掌握
68 0
|
算法
单链表(算法面试题2)---单链表进阶2 一题多解,逐步优化
单链表(算法面试题2)---单链表进阶2 一题多解,逐步优化
45 0
|
6月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
7月前
|
算法 索引
【数据结构与算法 | 基础篇】力扣704/35/34:二分查找
【数据结构与算法 | 基础篇】力扣704/35/34:二分查找
|
7月前
|
Go
基础数据结构leetcode回溯法专题
基础数据结构leetcode回溯法专题
31 0
|
测试技术 编译器 Shell
快排&超详细,Leetcode排序数组题目带你升华掌握(下)
快排&超详细,Leetcode排序数组题目带你升华掌握(上)
146 0
图解LeetCode——108. 将有序数组转换为二叉搜索树
图解LeetCode——108. 将有序数组转换为二叉搜索树
825 1
|
算法
算法练习题(二)——反转链表
算法练习题(二)——反转链表
93 0
算法练习题(二)——反转链表
|
算法 索引
【数据结构与算法】二分查找算法
【数据结构与算法】二分查找算法
【数据结构与算法】二分查找算法