给你一个整数数组
nums,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。
解法 递归建树
思路
题目是要求构造一个平衡二叉树,那相对应的左右子树节点不能相差太多。而数组是有序的,那就应该取 中间元素 当根节点,左半边递归建左子树,右半边递归建右子树,这样就是平衡的二叉树。
代码
function sortedArrayToBST(nums: number[]): TreeNode | null {
if (nums.length === 0) return null;
function build(left: number, right: number): TreeNode | null {
if (left > right) return null;
const mid = Math.floor((left + right) / 2);
const node = new TreeNode(nums[mid]);
node.left = build(left, mid - 1);
node.right = build(mid + 1, right);
return node;
}
return build(0, nums.length - 1);
}
时空复杂度
时间复杂度:O(n)
空间复杂度:O(logn)