一、数组构建普通的二叉排序树
普通的二叉排序树只需要保证二叉树的根节点大于或等于其左子树,根节点小于其右子树即可,具体的算法代码如下:
//数组构建一棵排序二叉树
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);
}