/**
创建一棵树*/
public class MyTree {
int data;//节点数据
MyTree left;//左子树
MyTree right;//右子树
/**
* 构建一个节点*/
public MyTree(int data){
this.data=data;
left=null;
right=null;
}
/**
* 规则:二叉树的左节点比根结点的值小
* 右节点比二叉树的根节点值大*/
/**
* 添加节点,构建二叉树(采用递归的算法构建)
* @param data 需要插入的节点数据1*/
public void insertNode(MyTree root, int data){
if(data>root.data){//插入的数据大于根节点的值
if(root.right==null){
root.right=new MyTree(data);
}else {
insertNode(root.right, data);//递归:继续往下判断
}
}else {//插入的数据小于根节点的值
if(root.left==null){
root.left=new MyTree(data);
}else {
insertNode(root.left, data);//递归:继续往下判断
}
}
}
}
/**
* 排序*/
public class TreeOrder {
/*(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树。简记根-左-右。
(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树。简记左-根-右。
(3)后序遍历(LRD),首先遍历左子树,然后遍历右子树,最后访问根结点。简记左-右-根。*/
public static void preOrder(MyTree root) { // 先根遍历
if (root != null) {
System.out.print(root.data + "-");
preOrder(root.left);
preOrder(root.right);
}
}
public static void inOrder(MyTree root) { // 中根遍历
if (root != null) {
inOrder(root.left);
System.out.print(root.data + "--");
inOrder(root.right);
}
}
public static void postOrder(MyTree root) { // 后根遍历
if (root != null) {
postOrder(root.left);
postOrder(root.right);
System.out.print(root.data + "---");
}
}
}
/**
* main函数*/
public class TreeDemo {
public static void main(String[] args) {
int[] array = {12,76,35,22,16,48,90,46,9,40};
MyTree root = new MyTree(array[0]); //创建二叉树
for(int i=1;i<array.length;i++){
root.insertNode(root, array[i]); //向二叉树中插入数据
}
System.out.println("先根遍历:");
TreeOrder.preOrder(root);
System.out.println();
System.out.println("中根遍历:");
TreeOrder.inOrder(root);
System.out.println();
System.out.println("后根遍历:");
TreeOrder.postOrder(root);
}
}
/*先根遍历结果:
12-9-76-35-22-16-48-46-40-90-
中根遍历:
9--12--16--22--35--40--46--48--76--90--
后根遍历:
9---16---22---40---46---48---35---90---76---12---*/