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);
}
}
分享到:
相关推荐
关于强制降解试验的决策树.pdf
标题“圣诞树.zip”可能指的是一个包含与圣诞节相关的文件或资源的压缩包。在这个压缩文件中,只有一个名为“圣诞树”的子文件。由于没有提供具体的标签,我们可以假设这个文件可能是图像、文本、软件应用程序或者...
事故树.png(关于冒顶事故的事故树)
标题“爱心树.zip”可能指的是一个包含与“爱心树”这一主题相关的文件的压缩包。在描述中同样提到了“爱心树.zip”,这表明压缩包的名称与内容是一致的,很可能里面包含了与《爱心树》这个故事或者项目有关的资料。...
这个"用CTreeCtrl实现目录树.rar.rar"的资源很可能是关于如何在C++环境下使用MFC中的`CTreeCtrl`来构建一个模仿Windows资源管理器目录树的教程或代码示例。 `CTreeCtrl`是基于Windows API中的`TVirtualTreeCtrl`...
【标签】: "基于Ajax的文件树.rar" 标签明确了这个资源的主题,是关于使用Ajax技术实现的文件树结构,可能涉及到前端开发、JavaScript编程、以及可能的XML或JSON数据交换。 【子文件列表】: 压缩包内的文件名没有给...
【标题】:“小贝程序员生活\课件\js\树.rar”揭示了关于JavaScript中数据结构——树的应用和理解。 【描述】:“\小贝程序员生活\课件\js\树.rar \小贝程序员生活\课件\js\树.rar”的描述表明这是一个关于...
标题“3圣诞树.zip”可能是指一个包含与圣诞节主题相关的三个文件或文件夹的压缩包。由于标签为空,我们无法获得更多的上下文信息,但我们可以根据文件名来推测可能的内容。压缩包中的唯一子文件或文件夹名为“3圣诞...
这个“数据结构课设_B+树.zip”压缩包包含了关于B+树的详细讲解,可能是作为数据结构课程设计的一部分,帮助学生深入理解和应用这一关键概念。 B+树是一种多路搜索树,它的主要特性是所有数据都存储在叶子节点中,...
关于强制降解试验的决策树.doc
这个“php-leetcode题解之实现前缀树.zip”压缩包显然是针对PHP开发者的一个资源,旨在帮助他们理解并解决LeetCode上关于前缀树(也称为 Trie)的题目。 前缀树是一种数据结构,特别适用于存储字符串,它的主要特点...
标题 "2022年圣诞树.zip" 暗示这是一个包含与2022年圣诞节相关的文件的压缩包。由于没有提供具体的标签,我们无法得知这个压缩包内的具体技术内容,但我们可以根据常见的圣诞树装饰和庆祝活动来推测可能包含的一些IT...
3.巩固关于打开文件和保存文件的操作 Windows系统下的visual studio 2017 C#窗体应用程序 由于分形图形的种类有很多种,但大多数是采用了递归的思想进行绘制,所以本文以较为常见和相对来讲难度不那么大的分形树进行...
本资料“图论- 支配树.rar”包含了一份关于支配树的详细阐述,以下是该主题的主要知识点: 1. **定义**:在无向图G=(V,E)中,如果图中每一点v都直接被树T中的一个顶点支配(即v属于T或与T中某点有边相连),那么树T...
【昆明理工大学 天气决策树.docx】是一个关于利用决策树进行天气预测的实验报告,主要涉及计算机科学(cs)中的决策树算法。实验的主要目标是让学生理解和掌握如何使用信息增益(Information Gain)构建决策树,并...
在“mbtr-master”这个压缩包文件中,我们可以推测这是一个关于多元增强树实现的项目源代码库。"MBTR"可能是"MultiBoosting Tree Regression"的缩写,暗示这是一个用于回归任务的多元增强树算法。通常,这种类型的...
【常见校园树木】是关于生态环境和生物学的知识,主要介绍了多种常出现在校园中的树木,包括它们的特征、生态价值以及与其他生物的互动关系。以下是对这些树木的详细解析: 1. **榕树**:榕树是桑科常绿乔木,其...
【标题】"很不错的3D圣诞树.zip"所包含的知识点主要集中在HTML和前端开发领域,特别是关于3D效果的实现。在这个项目中,我们可能会遇到以下关键技术和概念: 1. HTML5 Canvas:3D圣诞树可能利用了HTML5的Canvas元素...