力扣 - 108. 将有序数组转换为二叉搜索树
题目
思路(中序遍历的递归)
- 中序遍历,选择中间位置作为根节点
- 二叉搜索树的中序遍历是升序的,所以我们可以根据升序遍历来恢复二叉搜索树
- 又因为是要平衡的,所以我们选取数组中间位置的值创建节点
代码
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return transform(nums, 0, nums.length-1);
}
private TreeNode transform(int[] nums, int left, int right) {
// left等于right时也要判断
if (left <= right) {
int mid = (left + right) / 2;
TreeNode node = new TreeNode(nums[mid]);
// 构建左右子树
node.left = transform(nums, left, mid-1);
node.right = transform(nums, mid+1, right);
// 返回组装好的节点
return node;
} else {
return null;
}
}
}
复杂度分析
- 时间复杂度:\(O(N)\),其中 N 为树的节点数量
- 空间复杂度:\(O(logN)\),其中 N 为树的节点数量,因为递归的最大深度就是树的高度,因此为logN
我走得很慢,但我从不后退!

浙公网安备 33010602011771号