108、将有序数组转换为二叉搜索树
程序员文章站
2022-06-03 16:51:44
...
问题描述
问题分析
分析题目,由于求的是二叉搜索树,我们立即想到二叉搜索树的性质:
- 左子树的一切元素都比根节点小,右子树的一切元素都比根节点大,且所有的子树左右子树的节点数相差不超过1个。
结合题目所给的有序数组,很容易想到把数组从中间分成两半,中间的元素是根节点,左边的数组是左子树,右边的数组是右子树。
然后可以发现,这是经典的分治法。
解法:分治法
- 时间复杂度:O( n ),其中n表示数组中元素的个数,。
Java代码
package com.company;
public class Main {
static public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public static void main(String[] args) {
int[] ans = {-10, -3, 0, 5, 9};
TreeNode root = sortedArrayToBST(ans);
System.out.println(11);
}
static public TreeNode sortedArrayToBST(int[] nums) {
int start = 0;
int end = nums.length - 1;
return ToBST(nums, start, end);
}
private static TreeNode ToBST(int[] nums, int start, int end) {
if (start >= 0 && end <= nums.length - 1 && end >= start){
int mid = (start + end + 1) / 2;
TreeNode root = new TreeNode(nums[mid]);
root.left = ToBST(nums, start, mid - 1);
root.right = ToBST(nums, mid + 1, end);
return root;
}else {
return null;
}
}
}
结果分析
以上代码的执行结果:
执行时间 | 内存消耗 |
---|---|
0 ms | 37.4 MB |
上一篇: 腐竹怎么做好吃又美味 请不要错过
下一篇: 云南甜酱油是用什么东西去制作的呢?