1.题目
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
(大意:给定一个升序排列的数组,将其构造成一颗平衡二叉树,平衡二叉树的定义就是任意一个结点的左右子树高度相差不超过1.)Example:
Given the sorted array: [-10,-3,0,5,9], One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST: 0 / \ -3 9 / / -10 5
2.思路
首先构造根结点,其val值是数组的中间位置(mid=low+(high-low)/2)的值。递归算法,其左孩子是low~mid的有序数组构成的平衡二叉树,
右孩子是mid~high的有序数组构成的平衡二叉树。当low>high时,即左孩子或右孩子为空。
3.算法(Accepted)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
//this is a recursive algorithm Accepted
public TreeNode sortedArrayToBST(int[] nums) {
int length=nums.length;
return findMid(nums,0,length-1);
}
public TreeNode findMid(int[]nums,int low,int high){
if(low<=high){
int mid=low+(high-low)/2;
TreeNode node=new TreeNode(nums[mid]);
node.left=findMid(nums,low,mid-1);
node.right=findMid(nums,mid+1,high);
return node;
}else{
return null;
}
}
}