【leetcode】108.将有序数组转换为二叉搜索树

46 阅读1分钟

leetcode-108.png

题目简述:根据有序数组构建二叉搜索树
这是一道构建二叉树的题目,可以和105题一起做一些,一般这种构造树都需要递归来解题

🧠 解题思路

二叉搜索树(BST)的特性是:左子树所有节点值 < 根节点值 < 右子树所有节点值,而题目给出的数组已经是升序排列的,因此:

  • 可以 选择数组的中间元素作为根节点,左边部分构建左子树,右边部分构建右子树。
  • 递归进行这个过程,直到子区间为空,返回 null

这样构建出来的 BST 能够保证左右子树的节点数量尽可能接近,从而使得整棵树是高度平衡的

var sortedArrayToBST = function (nums) {
    var construct = function (nums, left, right) {
        if (left > right) return null
        // 找到中点,设为根节点
        let mid = Math.floor((left + right) / 2)
        let node = new TreeNode(nums[mid])
        // 递归构建左子树,mid 已经被构建,所以右边界为 mid - 1
        node.left = construct(nums, left, mid - 1)
        // 递归构建右子树,mid 已经被构建,所以左边界为 mid + 1
        node.right = construct(nums, mid + 1, right)
        return node
    }
    return construct(nums, 0, nums.length - 1)
};