将有序数组转换为二叉搜索树
- 构造二叉树的思路
- 先构造根节点
- 然后构建左右子树
- 一个有序数组对于 BST 来说就是中序遍历结果
- 根节点在数组中心
- 数组左侧是左子树元素
- 右侧是右子树元素
注意点:
- 分解问题的思路,所以每次都需要
return
一个节点
var sortedArrayToBST = function (nums) {
let n = nums.length;
return build(0, n - 1);
function build(left, right) {
if (left > right) return null;
let mid = Math.floor((left + right) / 2);
let root = new TreeNode(nums[mid]);
// 递归构建左子树
root.left = build(left, mid - 1);
// 递归构造右子树
root.right = build(mid + 1, right);
return root;
}
};
思路总结:
- 因为输入的数组是有序的,我们可以每次取中间的数作为根节点
- 中间数左边的部分递归构建左子树
- 中间数右边的部分递归构建右子树
- 这样构建出来的树会是一个高度平衡的 BST