1.题目:
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
示例 1:
输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.代码:
/**
* 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) {
return change(nums,0,nums.length-1);//注意这里的尾巴是数组的长度减一
}
public TreeNode change(int[] nums,int left,int right){
if(left>right) return null;//递归的出口
int mid = (right+left)/2;//找到数组的中间值,就是二叉树的头结点
TreeNode root = new TreeNode(nums[mid]);//先构造头结点
root.left = change(nums,left,mid-1);//然后递归传进二叉树的左子树//注意范围,这里用的是左闭右闭
root.right = change(nums,mid+1,right);//递归传进二叉树的右子树
return root;
}
}