题目简述:根据有序数组构建二叉搜索树
这是一道构建二叉树的题目,可以和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)
};