一、问题描述:
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
二、解决思路:
平衡BST的话,位于中间位置的节点当做ROOT, 可以保证平衡。中间节点的左边元素为左子树右边元素为右子树,递归即可。
三、代码:
package T12;
/**
* @author 作者 : xcy
* @version 创建时间:2016年12月30日 下午2:31:19
* 类说明
*/
public class t108 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums = { 1, 2 };
TreeNode root = sortedArrayToBST(nums);
System.out.println("done!");
}
public static TreeNode sortedArrayToBST(int[] nums) {
if (nums.length == 0) {
return null;
}
if (nums.length == 1) {
return new TreeNode(nums[0]);
}
TreeNode root = sortedArrayToBST(nums, 0, nums.length - 1);
return root;
}
public static TreeNode sortedArrayToBST(int[] nums, int start, int end) {
int num = end - start;
if (num == 0) {
return new TreeNode(nums[start]);
}
if (num == 1) {
TreeNode root = new TreeNode(nums[end]);
root.left = new TreeNode(nums[start]);
return root;
}
// only two
int mid = start + num / 2;
TreeNode root = new TreeNode(nums[mid]);
root.left = sortedArrayToBST(nums, start, mid - 1);
root.right = sortedArrayToBST(nums, mid + 1, end);
return root;
}
}