持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情
前言
今天我们继续来刷题,《将有序数组转换为二叉搜索树》题目难度级别为简单,
算法题:将有序数组转换为二叉搜索树
从题目的描述中,我们可以初步判断出最后想要得到的结果是一个二叉树,是由一个升序整数数组来转化而成的。
也就是最后要得到一个层级平衡的二叉树,比如题目中给的示例,如果是五个元素,那么最多是三级,一旦超过四级,这个二叉树左右就不再平均了;也就不满足最后我们所需要的结果了。
但是这里有一个需要注意的点,那就是提供的一定是一个升序数组,所以我们就可以采用二分法来给二叉树的左右两个分叉分配元素数量。
还有一个点,那就是最后的预期结果可能会是多种,所以这道题在很多情况下没有固定答案,只能判断二叉树是否够平均即可。
代码展示
我本次执行的代码如下:采用的二分法和递归来处理和生成符合要求的二叉树结构。
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;
}
}
执行结果
逢二叉树,必递归。
这次的递归表现挺好的,排名很理想。
总结
连着做了好几天的二叉树题目,对这个数据结构已经比较熟悉了,大家有什么心得没有,可以评论区见。