Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
题意:给定一个升序排列的数组,将它转换成平衡二叉树。
平衡二叉树是指它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
另外平衡二叉树还是排序二叉树BST的特例。
解法1:递归创建。将数组平分长两部分,减一(根节点占一位)以后是奇数也没有关系,因为平衡二叉树允许高度值差1.
对这两部分,再递归调用生成平衡二叉树,最后将左右子树连接到根节点就可以了
递归出口是只有一个数的时候,返回节点本身
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return helper(nums, 0, nums.length-1);
}
public TreeNode helper(int[] nums,int start,int end){
if(start>end) return null;
if(start==end) return new TreeNode(nums[start]);//递归出口
int mid = start+(end-start)/2;
TreeNode t = new TreeNode(nums[mid]);//根节点
t.left = helper(nums, start, mid-1);//生成左子树
t.right = helper(nums, mid+1, end);//生成右子树
return t;
}
}