用JAVA创建二叉树将数组中的数依次存入二叉树,若数值为负数或零则对应的节点为空
定义二叉树的结构
public class Bitree {
int data;
Bitree left;
Bitree right;
int i; //用于记录此节点的值在数组中存放的位置;
public Bitree(){
}
public Bitree(int i){
this.i = i;
}
public Bitree(int data,Bitree l,Bitree r){
this.data =data;
this.left =l;
this.right =r;
}
public void Print(){
System.out.print(this.data+",");
}
}
接口
public interface VisitTreeInterface {
public Bitree Creatroot(Bitree node);//创建根节点
public Bitree Creatleft(Bitree node);//插入左节点
public Bitree Creatright(Bitree node);//插入右节点
public void PreOrder(Bitree node);//先序遍历二叉树
public void LastOrder(Bitree node);//后序遍历
public void MidOrder(Bitree node);//中序遍历
}
实现接口的类
public class Creattree implements VisitTreeInterface {
int[] b;
public Creattree(int[] a){
this.b=a;
}
public Bitree Creatroot(Bitree node){ //创建根节点
if(node.i
if(b[node.i]<=0)
node=null;
else if(node!=null){
node.data=b[node.i];
System.out.println(node.i+" "+node.data);
node.left=Creatleft(node);
node.right=Creatright(node);
}
}
return node;
}
public Bitree Creatleft(Bitree node){ //左节点
if(node!=null)
{
node.left=new Bitree();
node.left.i=2*node.i+1; // 根节点在数组中存放的位置为i 则左节点为2*i+1
Creatroot(node.left); //调用递归;
}
return node.left;
}
public Bitree Creatright(Bitree node){ //右节点
if(node!=null)
{
node.right=new Bitree();
node.right.i=2*node.i+2;
Creatroot(node.right);
}
return node.right;
}
public void PreOrder(Bitree node){
if(node!=null){
node.Print();
PreOrder(node.left );
PreOrder(node.right );
}
}
public void LastOrder(Bitree node){
if(node!=null){
LastOrder(node.left);
LastOrder(node.right);
node.Print();
}
}
public void MidOrder(Bitree node){
if(node!=null){
MidOrder(node.left);
node.Print();
MidOrder(node.right);
}
}
}
创建二叉树并遍历
public class Main {
public static void main(String[] args){
int[] b={1,4,5,2,-6,5,9,10};
Bitree node=new Bitree(0);
Bitree bt;
Creattree ct=new Creattree(b);
bt=ct.Creatroot(node);
ct.PreOrder(bt);
System.out.print("/n");
ct.LastOrder(bt);
System.out.print("/n");
ct.MidOrder(bt);
System.out.print("/n");
}
}