20182324 2019-2020-1 《数据结构与面向对象程序设计》实验8报告
课程:《程序设计与数据结构》
班级: 1823
姓名: yyh
学号: 20182324
实验教师:王志强
实验日期:2019年11月11日
必修/选修: 必修
1.实验内容
-
1.参考教材 PP16.1,完成链树 LinkedBinaryTree 的实现( getRight,contains,toString,preorder,postorder )
用 JUnit 或自己编写驱动类对自己实现的 LinkedBinaryTree 进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台 -
2.基于 LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序 HDIBEMJNAFCKGL 和后序 ABDHIEJMNCFGKL ,构造出附图中的树
用 JUnit 或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台
-
3.自己设计并实现一颗决策树
提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台 -
4.输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(如果没有用树,正常评分。如果用到了树,即使有小的问题,也酌情给满分)
提交测试代码运行截图,要全屏,包含自己的学号信息
2. 实验过程及结果
-
(1)实现二叉树
-
(2)中序先序序列构造二叉树
-
(3)设计并实现一颗决策树
-
(4)将中缀表达式转换为后缀表达式
3. 实验过程中遇到的问题和解决过程
-
问题1:对 Java 中 Iterator 的理解
-
问题1解决方案:
java.util.Iterator
在 JDK 帮助文档中这样阐述:public interface Iterator<E> 对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:- 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
- 方法名称得到了改进。
Iterator 分别有boolean hasNext()
、E next()
、void remove()
三个方法。
-
问题2:按照书上代码补充实现 LinkedBinaryTree,在 ArrayIterator 处报错。
-
问题2解决方案:可用 ArrayList 代替,ArrayList 类的已实现接口中包含 Iterable<E> 。
-
问题3:在查找二叉树时遇到 NullPointerException 空指针报错。
-
问题3解决方案:已定位到问题所在,但尚未解决。同学博客提出了一个解决方法:重新编辑驱动代码,确认调用无误值已初始化。该方法亟待验证。
其他(感悟、思考等)
二叉树是一种应用较为广泛的数据结构,它支持在多种不同的情况下进行选择。通过先序和中序遍历可确定一颗唯一的二叉树。对于数据结构与算法的处理,心里一定要先有一个大致的规划,否则在实际编写的过程中会相当盲目。