42.将有序数组转换为二叉搜索树

62 阅读1分钟

题目链接

给你一个整数数组 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)