思路:取中位數作爲當前的根節點,中位數左邊的數組遞歸的計算左子節點,中位數右邊的數組遞歸計算右子節點。
/**
* Created by marsares on 15/6/15.
*/
public class ConvertSortedArraytoBinarySearchTree {
public TreeNode sortedArrayToBST(int[] nums) {
if(nums==null)return null;
if(nums.length==0)return null;
return traversal(nums,null);
}
public TreeNode traversal(int[]nums,TreeNode root){
if(nums==null)return null;
if(root==null){
root=new TreeNode(nums[medium(nums)]);
return traversal(nums,root);
}
root.left=traversal(subnums(nums,0,medium(nums)),root.left);
root.right=traversal(subnums(nums,medium(nums)+1,nums.length),root.right);
return root;
}
private int medium(int[]nums){
if(nums.length%2==0)return nums.length/2-1;
else return nums.length/2;
}
private int[] subnums(int[]nums,int start,int end){
if(start==end)return null;
int[]nums2=new int[end-start];
int j=0;
for(int i=start;i<end;i++){
nums2[j]=nums[i];
j++;
}
return nums2;
}
public static void main(String[]args){
ConvertSortedArraytoBinarySearchTree csatbst=new ConvertSortedArraytoBinarySearchTree();
BinaryTreeSerialize bts=new BinaryTreeSerialize();
int[]array={1,2,3,4,5};
TreeNode root=csatbst.sortedArrayToBST(array);
System.out.println(bts.Serialize(root));
}
}