树与图简单1 种解法
#108将有序数组转换为二叉搜索树
把升序数组转换为一棵高度平衡二叉搜索树。
#二叉搜索树#分治#数组
解题主线
01
每次选择区间中点作为根,可让左右子树规模最多相差一。
解法 1:中点分治
递归用中点建立根,并处理左右半区间。
时间复杂度
O(n)
空间复杂度
O(log n),递归栈;不计输出树
java
import java.util.*;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return build(nums, 0, nums.length - 1);
}
private TreeNode build(int[] nums, int left, int right) {
if (left > right) return null;
int middle = left + (right - left) / 2;
TreeNode root = new TreeNode(nums[middle]);
root.left = build(nums, left, middle - 1);
root.right = build(nums, middle + 1, right);
return root;
}
}递归用中点建立根,并处理左右半区间。
边界与易错点
- 空区间条件是 left > right。
- 中点用 left + (right - left) / 2 避免溢出。
整理来源
由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。
leetcode/src/main/java/tree/Q108_sortedArrayToBST.java