108 - 将有序数组转换为二叉搜索树
题目链接
题目
给你一个整数数组
nums
,其中元素已经按升序排列,请你将其转换为一棵平衡二叉搜索树。
思路
因为要转换为平衡的二叉搜索树,所以我们要用数组的中点作为树的根,这样两侧的高度差才会小于1,中点左侧为左子树,右侧为右子树。并且这也满足一颗二叉搜索树,因为排序好的数组中,中点左侧都是小于中点的,右侧都是大于中点的。
代码
/**
* @param {number[]} nums
* @return {TreeNode}
*/
var sortedArrayToBST = function(nums) {
if(!nums.length) {
return null;
}
if(nums.length === 1) {
return new TreeNode(nums[0]);
}
// 找到中间节点
// 递归得到左子树和右子树
const middle = Math.floor(nums.length / 2);
const root = new TreeNode(nums[middle]);
root.left = sortedArrayToBST(nums.slice(0, middle));
root.right = sortedArrayToBST(nums.slice(middle + 1));
return root;
};
复杂度分析
- 时间复杂度:。其中是数组长度。
- 空间复杂度:。