将有序数组转换为高度平衡二叉搜索树 | 详解与Java实现
文章目录
- 1. 问题描述
- 2. 方法思路
- 核心思想:分治法 + 递归
- 3. 代码实现
- Java实现(含注释)
- 4. 复杂度分析
- 5. 关键点解释
- 为何选择中间节点?
- 为何使用 `left + (right - left) / 2` 而非 `(left + right) / 2`?
- 6. 扩展优化
- 迭代法实现(非递归)
- 优化空间
- 7. 总结
1. 问题描述
108.将有序数组转换为二叉搜索树
2. 方法思路
核心思想:分治法 + 递归
- 选择中间节点作为根
- 每次递归时,选择当前子数组的中间元素作为根节点,确保左右子树节点数量接近,从而实现高度平衡。
- 递归构建子树
- 将中间元素的左侧子数组递归构造成左子树,右侧子数组构造成右子树。
- 终止条件
- 当子数组的起始索引超过结束索引时,返回空节点。
3. 代码实现
Java实现(含注释)
class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val = val; }TreeNode