关于树......

public class Tree{
Object cargo;
Tree left,right;
public Tree(Object cargo,Tree left,Tree right){
this.cargo=cargo;
this.left=left;
this.right=right;
}
public static void main(String args[]){
Tree left=new Tree(new Integer(2),null,null);
Tree right=new Tree(new Integer(3),null,null);
Tree tree=new Tree(new Integer(1),left,right);
print(tree);
System.out.println();
printPostorder(tree);
System.out.println();
printInorder(tree);
System.out.println();
System.out.println("---------------------------------");
//tree.print();
}
public static void print(Tree tree){ //前缀
if(tree==null) return;
System.out.print(tree.cargo+" ");
print(tree.left);
print(tree.right);
}
public static void printPostorder(Tree tree){ //后缀
if(tree==null) return;
printPostorder(tree.left);
printPostorder(tree.right);
System.out.print(tree.cargo+" ");
}
public static void printInorder(Tree tree){ //中缀
if(tree==null) return;
printInorder(tree.left);
System.out.print(tree.cargo+" ");
printInorder(tree.right);
}
}
/*
java语言中写元类有两种方式:接口类,抽象类
*/

上面这个学着写的还可以,下面这个类就比较乱了
import java.util.*;
public class Token implements Visitable{
String str;
public Token(){
this.str=null;
}
public Token(String str){
this.str=str;
}
public void vist(){
System.out.print(this.str+" ");
}
//此出无法体现接口前public作用

public static void main(String args[]){
String expr="1 2 3 * +";
StringTokenizer st=new StringTokenizer(expr," +-*/",true);
//true:把第二个参数指定的分界符也作为记号输出。
String token=st.nextToken();
//System.out.println(token);
Tree tree=new Tree(new Token(token),null,null);
visitPreorder(tree);

System.out.println();
System.out.println("-------------------------------");
/*
把String类expr变量的第一个记号改换成Token对象,再把
这个Token对象放到一个树的节点中。如果此后对树的
遍历过程中需要“看见”节点的货物时,就可以把Token类型
的对象转换成Visitable对象.需要注意的是,一旦从树中取出
Visitable类型对象后,还必须用转型的方法将之转换成Token
类型,但可以在Token对象身上直接调用vist方法.
*/

Tree tr=new Tree(new Integer(10),null,null);
Tree.print(tr);
}
public static void visitPreorder(Tree tree){
if(tree==null) return;
//System.out.print(tree.cargo+" ");
Token token=new Token();
token=(Token)tree.cargo;
token.vist();
visitPreorder(tree.left);
visitPreorder(tree.right);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值