20182303 2019-2020-1 《数据结构与面向对象程序设计》实验8报告
课程:《程序设计与数据结构》
班级: 1823
姓名:张端云
学号:20182303
实验教师:王志强
实验日期:2019年11月7日
必修/选修: 必修
1.实验内容
- 参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder),用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试。
- 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和先序ABDHIEJMNCFGKL,构造出附图中的树,用JUnit或自己编写驱动类对自己实现的功能进行测试。
- 自己设计并实现一颗决策树并完成测试。
- 输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果。
2. 实验过程及结果
point1
完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder),并完成测试。
point2
基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二叉树的功能,并完成测试。
设计思路:
(1)确定树的根结点;(先序遍历的第一个结点就是二叉树的根)
(2)求解树的子树;(找到根在中序遍历的位置,位置左边就是二叉树的左孩子,位置右边是二叉树的右孩子,如果根结点左边或右边为空,那么该方向子树为空;如果根节点左边和右边都为空,那么根节点已经为叶结点)
(3)对二叉树的左、右孩子递归进行步骤(1)(2),直到求出二叉树的结构为止。
point3
自己设计并实现一颗决策树并完成测试。
我设计的决策树名为“史上最准的心理测试”,以下展示其中一种测试结果。
设计思路如下
point4
输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果。
- 表达式二叉树的定义
举个栗子,表达式:(a+b×(c-d))-e/f。将数字放在叶子节点,将操作符放在分支节点,就构成了一个二叉树,由于存储的是一个表达式,称之为“表达式二叉树”。 - 表达式二叉树的构建步骤
1.创建节点对象;
2.辨析出操作符与数据,存放在相应的列表(队列)中;
3.取出前两个数字和一个操作符,组成一个新的数字节点;
4.重复第3步,直到操作符取完为止;
5.让根节点等于最后一个节点。
代码托管
3. 实验过程中遇到的问题和解决过程
- 问题1:如何优雅的利用递归思想解决问题?
- 问题1解决方案:递归分析三步:
- 找整个递归的终止条件:递归应该在什么时候结束?
- 找返回值:应该给上一级返回什么信息?
- 本级递归应该做什么:在这一级递归中,应该完成什么任务?
- 问题2:如何理解java中的Iterator
- 问题2解决方案:
java.util.Iterator
在Java中Iterator为一个接口,它只提供了迭代的基本规则。在JDK中它是这样定义的:对Collection进行迭代的迭代器。迭代器取代了Java Collection Framework中的Enumeration。迭代器与枚举有两点不同:
1. 迭代器在迭代期间可以从集合中移除元素。
2. 方法名得到了改进,Enumeration的方法名称都比较长。
其接口定义如下:
package java.util;
public interface Iterator<E> {
boolean hasNext();//判断是否存在下一个对象元素
E next();//获取下一个元素
void remove();//移除元素
}