猿辅导面试算法题(6:数组构建二叉排序树)

一、数组构建普通的二叉排序树

普通的二叉排序树只需要保证二叉树的根节点大于或等于其左子树,根节点小于其右子树即可,具体的算法代码如下:

    //数组构建一棵排序二叉树
    public static TreeNode createSortedTreeNode(TreeNode root,int next){
        if (root == null){
            root=new TreeNode(next);
            return root;
        }else {
            if (next<=root.value){
                root.left=createSortedTreeNode(root.left,next);
            }else {
                root.right=createSortedTreeNode(root.right,next);
            }
        }
        return root;
    }

二、数组构建高度最小的二叉排序树

这里只需要在(一)的基础上保证根节点的左右子树的高度<=1即可,利用二分查找算法

    //数组建立一个高度最小的二叉排序树
    public static TreeNode createminheighttree(int[] array,int start, int end){
        Arrays.sort(array);
        if (array == null||array.length ==0){
            System.out.println("数组为空,无法构建二叉树");
        }
        if (start > end){
            return null;
        }
        int mid=start+(end - start)/2;
        TreeNode root=new TreeNode(array[mid]);
        root.left=createminheighttree(array, start, mid-1);
        root.right=createminheighttree(array, mid+1,end);
        return root;
    }

三、主函数进行测试

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String line=sc.nextLine();
        String[] array=line.split(",");
        int[] nums=new int[array.length];
        for (int i = 0; i < nums.length; i++) {
            nums[i]=Integer.parseInt(array[i]);
        }
        //采用数组构建一颗排序二叉树
        if (array==null||array.length ==0){
            throw new IllegalArgumentException("二叉树构建失败");
        }
        TreeNode root= new TreeNode(nums[0]);
        for (int j = 1; j < nums.length; ++j) {
            createSortedTreeNode(root,nums[j]);
        }
        midOrder(root);

        System.out.println("采用数组构建一个高度最小排序二叉树");
        //采用数组构建一个高度最小排序二叉树
        TreeNode root1=createminheighttree(nums,0,nums.length-1);
        midOrder(root1);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章