Algorithms first
将有序数组转换为二叉搜索树 · 交互式算法学习
把升序数组转换成高度平衡 BST。
#108 · 分治
将有序数组转换为二叉搜索树
Convert Sorted Array to Binary Search Tree
nums = [-10,-3,0,5,9]树 / 图3 个关键状态
步骤 1区间 [0,4] 中点为 2。
root=0推荐
下标区间递归
时间
O(n)空间 O(log n)只传左右下标,避免数组切片复制。
1function sortedArrayToBST(a) {2 function build(l, r) {3 if (l > r) return null;4 const m = (l + r) >> 1;5 return {6 val: a[m],7 left: build(l, m - 1),8 right: build(m + 1, r)9 }10 }11 return build(0, a.length - 1);12}多语言参考
来源 · CC BY-SA 4.0 ↗Java · C++ · Go
这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。
1/**2 * Definition for a binary tree node.3 * public class TreeNode {4 * int val;5 * TreeNode left;6 * TreeNode right;7 * TreeNode() {}8 * TreeNode(int val) { this.val = val; }9 * TreeNode(int val, TreeNode left, TreeNode right) {10 * this.val = val;11 * this.left = left;12 * this.right = right;13 * }14 * }15 */16class Solution {17 private int[] nums;18 19 public TreeNode sortedArrayToBST(int[] nums) {20 this.nums = nums;21 return dfs(0, nums.length - 1);22 }23 24 private TreeNode dfs(int l, int r) {25 if (l > r) {26 return null;27 }28 int mid = (l + r) >> 1;29 return new TreeNode(nums[mid], dfs(l, mid - 1), dfs(mid + 1, r));30 }31}交互式算法学习
从执行步骤真正理解 LeetCode 经典 150
本站整理 150 道高频算法面试题和 302 种解法。动画方法同步展示 JavaScript 与 Python;每题另提供 Java、C++ 与 Go 同题参考实现。
AlgoViz Lab
将有序数组转换为二叉搜索树 · 解法对比
把升序数组转换成高度平衡 BST。
- 测试用例
nums = [-10,-3,0,5,9]- 题目分类
- 分治
- 解法对比
- 2
不断切片取中点
中点作根,左右切片递归构造子树。
- 时间
O(n log n)- 空间
O(n log n)
下标区间递归
只传左右下标,避免数组切片复制。
- 时间
O(n)- 空间
O(log n)