二叉树java实现
代码
public class BinaryTree03 {
private BiTNode bt;
private int[] array;
private int count = 0;
public BinaryTree03(){}
public BinaryTree03(int[] array){
this.array = array;
bt = creatTree(array.length, bt);
}
private BiTNode creatTree(int n,BiTNode bt){
if(n <= 0){
return null;
}
bt = new BiTNode();
bt.setData(array[count++]);
n = n-1;
if(n >= 1 && (n % 2 != 0)){
bt.ichild = creatTree((n + 1) / 2, bt.ichild);
bt.rchild = creatTree((n - 1) / 2, bt.rchild);
}
if(n > 1 && (n % 2 == 0)){
bt.ichild = creatTree(n / 2, bt.ichild);
bt.rchild = creatTree(n / 2, bt.rchild);
}
return bt;
}
public void add(int[] array){
this.array = array;
add1();
}
private void add1(){
bt = null;
bt = creatTree(array.length, bt);
}
public void preorderTraversal(){
System.out.println("前序遍历:");
preorderTraversal1(bt);
}
private void preorderTraversal1(BiTNode bt){
if(bt == null){
return;
}
System.out.print(bt.getData() + " ");
preorderTraversal1(bt.ichild);
preorderTraversal1(bt.rchild);
}
public void inOrderTraverse(){
System.out.println("\n" + "中序遍历:");
inOrderTraverse1(bt);
}
private void inOrderTraverse1(BiTNode bt){
if (bt == null) {
return;
}
inOrderTraverse1(bt.ichild);
System.out.print(bt.getData() + " ");
inOrderTraverse1(bt.rchild);
}
public void postOrderTraverse(){
System.out.println("\n" + "后序遍历:");
postOrderTraverse1(bt);
}
private void postOrderTraverse1(BiTNode bt){
if (bt == null) {
return;
}
postOrderTraverse1(bt.ichild);
postOrderTraverse1(bt.rchild);
System.out.print(bt.getData() + " ");
}
}
public class BiTNode {
private int data;
public BiTNode ichild = null;
public BiTNode rchild = null;
public void setData(int data){
this.data = data;
}
public int getData(){
return data;
}
}
public class Demo {
public static void main(String[] args) {
int[] array = new int[]{1,2,3,4,5,6,7,8,9};
BinaryTree03 bt = new BinaryTree03(array);
bt.preorderTraversal();
bt.inOrderTraverse();
bt.postOrderTraverse();
}
}
结果
前序遍历:
1 2 3 4 5 6 7 8 9
中序遍历:
4 3 2 5 1 8 7 6 9
后序遍历:
4 3 5 2 8 7 9 6 1