将有序数组转换为二叉搜索树
1.题目: (将有序数组转换为二叉搜索树)
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
2. 示例
3.解答步骤
思路都在注释上! 请大家自主阅读程序!
⭐ 本篇注意点: 如何解决高度平衡?
答: 因为数组是有序数组,只要不断二分再递归,就可以构造出一个高度平衡的搜索树
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
// 假如数组长度为0,直接返回 null
if(nums.length == 0) {
return null;
}
// 递归
return sortedArrayToBST(nums, 0, nums.length-1);
}
// 编写一个递归函数
public TreeNode sortedArrayToBST(int[] nums, int start, int end) {
// 假如开始下标高于结束下标, 直接返回null
if(start > end) {
return null;
}
// 假如开始下标不大于结束下标的话
// 那么就说明,还有子节点
// 那么继续二分
// 因为数组是排好序的
int mid = (start + end) >> 1;
TreeNode root = new TreeNode(nums[mid]);
// 设置左子树为以mid为中间
// 左边的数组部分再递归
// 设置右子树以mid为中心
// 右边的再递归
root.left = sortedArrayToBST(nums, start, mid-1);
root.right = sortedArrayToBST(nums, mid+1, end);
return root;
}
}