题目描述:
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
来源:力扣(LeetCode)
思路:不同的方式有不同的实现结果!
迭代法实现起来比较麻烦
1)本题重要的一个想法是,不用考虑平衡的问题;
1)二叉树的好多问题,都是递归实现比较方便且好理解!
代码:
1)递归
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
//高度平衡不用考虑,自然是平衡的
//本题和构建 最大二叉树相比更容易,因为数组有序,容易找到最大值合适的值
return build(nums,0,nums.length - 1);
}
//左闭右闭
TreeNode build(int[] nums,int left,int right){
//此时已经没有数值元素,直接返回null
if(right - left < 0) return null;
int rootIndex = (right - left) / 2 + left;
int rootVal = nums[rootIndex];//找到的是最中间
//将找到的节点生成一个新的节点,也就是每次的root
TreeNode root = new TreeNode(rootVal);
//处理其左右子树
root.left = build(nums,left,rootIndex - 1);
root.right = build(nums,rootIndex + 1,right);
//将root返回,也是为了交给调用其的上一层
return root;
}
}