算法思想及代码解析:
这段代码的目的是将一个有序数组转换为 高度平衡的二叉搜索树(Balanced Binary Search Tree, BST)。以下是算法的详细解释:
1. 什么是高度平衡的二叉搜索树?
- 二叉搜索树:对于树中的每个节点,左子树所有节点的值小于根节点,右子树所有节点的值大于根节点。
- 高度平衡:指树中每个节点的左右子树高度差不超过1。
- 为了满足“高度平衡”,我们在构造树时尽量选择中间值作为根节点,使左右子树的节点数量尽可能接近。
2. 算法核心思路:
- 将数组的中间值作为树的根节点。
- 数组左半部分用来构造左子树,右半部分用来构造右子树。
- 递归地对左右子数组重复这个过程,直到子数组为空为止。
java 代码实现
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
if(nums == null || nums.length == 0) return null;
return helper(nums, 0, nums.length - 1);
}
private TreeNode helper(int[] nums, int left, int right) {
if(left > right) {
return null;
}
int mid = left + (right - left) / 2;
TreeNode root = new TreeNode(nums[mid]);
root.left = helper(nums, left, mid - 1);
root.right = helper(nums, mid + 1, right);
return root;
}
}