1、题目描述
2、题目解析
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
【数组】----转换成【二叉树】逻辑,且要求为高度平衡的【二叉树】。
这道题等价于,升序的数组,转换为二叉树。
中序遍历,总是选择中间位置左边的数字作为根节点
实现代码如下:
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
//要保证输出的数为平衡二叉树,每次均取数组的中间节点作为根节点【中序遍历】
return dfs(nums, 0, nums.length -1);
}
private TreeNode dfs(int[] nums, int left, int right){
if(left > right) return null;
// 总是选择中间位置左边的数字作为根节点
int mid = (right - left) / 2 + left;
TreeNode root = new TreeNode(nums[mid]);
root.left = dfs(nums, left, mid-1);
root.right = dfs(nums, mid+1, right);
return root;
}
}
复杂度分析
时间复杂度:O(n),其中 n 是数组的长度。每个数字只访问一次。
空间复杂度:O(logn),其中 n 是数组的长度。空间复杂度不考虑返回值,因此空间复杂度主要取决于递归栈的深度,递归栈的深度是 O(logn)。