跳到主要内容

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;
};

复杂度分析

  • 时间复杂度:O(n)O(n)。其中nn是数组长度。
  • 空间复杂度:O(n)O(n)