建立二叉排序树,是从前往后扫描数组,可以不保证高度最小,从头节点依次向下寻找要插入的适当位置。
建立平衡树,可以先将数组进行排序,然后选取中间元素作为根节点,数组中间元素左边的元素为根节点的左子树,数组中间右边的元素为根节点的右子树。
再对右子树和右子树选取中间节点,进行建树操作。
代码:
package easy;
import easy.JavaTree;
import easy.TreeNode;
public class BinarySortTree {
public static void main(String[] args) {
// TODO Auto-generated method stub
// int shuzu []= {3,1,2,5,0,7,9,8};
// TreeNode root = new TreeNode(shuzu[0]); //以3这个数为根节点
// for( int i = 1 ; i < shuzu.length ; i ++){
//
// SortBinaryTree(root, shuzu[i]);
// }
int shuzu []= {0,1,2,3,5,7,8,9};
preorder(createminheighttree(shuzu, 0, shuzu.length -1));
}
//递归数组从头到尾建立二叉树,可能不平衡
public static TreeNode SortBinaryTree(TreeNode node,int i){
if(node == null){
node = new TreeNode(i);
return node;
}
else{
if(i <= node.val){
node.left = SortBinaryTree(node.left, i);
}
else{
node.right = SortBinaryTree(node.right,i);
}
return node;
}
}
//建立平衡二叉排序树
public static TreeNode createminheighttree(int a [] , int start , int end ){
if(end < start){
return null;
}
int min = (start + end) / 2;
TreeNode root = new TreeNode(a[min]);
root.left = createminheighttree(a, start, min -1);
root.right = createminheighttree(a, min+ 1, end);
return root;
}
public static void preorder(TreeNode root){
if(root!=null){
System.out.println(root.val);
preorder(root.left);
preorder(root.right);
}
}
}