public class Bitree {
int data;
Bitree left;
Bitree right;
public Bitree(){
this.left =null;
this.right =null;
}
public Bitree(int data){
this.data = data;
}
public Bitree(int data,Bitree l,Bitree r){
this.data =data;
this.left =l;
this.right =r;
}
public void Print(){
System.out.println(this.data);
}
}public interface VisitTreeInterface {
public Bitree CreatTree(Bitree node);
public void PreOrder(Bitree node);
public void LastOrder(Bitree node);}
public class VisitTree implements VisitTreeInterface {
int[] a;
int i;
public VisitTree(int[] a){
i=0;
this.a=a;
}
public Bitree CreatTree(Bitree node){
while(i<a.length){
if(a[i]<0){
node=null;
i++;
}
else {
if(a[i]!=0){
node=new Bitree(a[i]);
System.out.println("node: "+i+" "+node.data);
i++;
CreatTree(node.left);
CreatTree(node.right);
}
}
}
return node;
}
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 class Main {
public static void main(String[] args){
int[] b={1,4,5,-8,6,-4,9,10};
Bitree node=null;
Bitree bt;
VisitTree tree=new VisitTree(b);
bt=tree.CreatTree(node);
tree.PreOrder(bt);
tree.LastOrder(bt);
}}
输出结果是
node: 0 1
node: 1 4
node: 2 5
node: 4 6
node: 6 9
node: 7 10
1
1 //为什么遍历的时候都只有根节点有值??其他的都为空??难道是我创建二叉树写错了吗?哪位大侠帮我看看问题出在哪里???
int data;
Bitree left;
Bitree right;
public Bitree(){
this.left =null;
this.right =null;
}
public Bitree(int data){
this.data = data;
}
public Bitree(int data,Bitree l,Bitree r){
this.data =data;
this.left =l;
this.right =r;
}
public void Print(){
System.out.println(this.data);
}
}public interface VisitTreeInterface {
public Bitree CreatTree(Bitree node);
public void PreOrder(Bitree node);
public void LastOrder(Bitree node);}
public class VisitTree implements VisitTreeInterface {
int[] a;
int i;
public VisitTree(int[] a){
i=0;
this.a=a;
}
public Bitree CreatTree(Bitree node){
while(i<a.length){
if(a[i]<0){
node=null;
i++;
}
else {
if(a[i]!=0){
node=new Bitree(a[i]);
System.out.println("node: "+i+" "+node.data);
i++;
CreatTree(node.left);
CreatTree(node.right);
}
}
}
return node;
}
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 class Main {
public static void main(String[] args){
int[] b={1,4,5,-8,6,-4,9,10};
Bitree node=null;
Bitree bt;
VisitTree tree=new VisitTree(b);
bt=tree.CreatTree(node);
tree.PreOrder(bt);
tree.LastOrder(bt);
}}
输出结果是
node: 0 1
node: 1 4
node: 2 5
node: 4 6
node: 6 9
node: 7 10
1
1 //为什么遍历的时候都只有根节点有值??其他的都为空??难道是我创建二叉树写错了吗?哪位大侠帮我看看问题出在哪里???
node.right=CreatTree(node.right);
值没带回去
所以
CreatTree(node.left);
CreatTree(node.right);
跟没写一样只有这句返回了创建的node,是有效的
bt = tree.CreatTree(node);