leetcode--ConvertSortedArraytoBinarySearchTree

思路:取中位數作爲當前的根節點,中位數左邊的數組遞歸的計算左子節點,中位數右邊的數組遞歸計算右子節點。

/**
 * 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));
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章