20182303 2019-2020-1 《数据结构与面向对象程序设计》实验8报告

课程:《程序设计与数据结构》
班级: 1823
姓名:张端云
学号:20182303
实验教师:王志强
实验日期:2019年11月7日
必修/选修: 必修

1.实验内容

  1. 参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder),用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试。
  2. 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和先序ABDHIEJMNCFGKL,构造出附图中的树,用JUnit或自己编写驱动类对自己实现的功能进行测试。
  3. 自己设计并实现一颗决策树并完成测试。
  4. 输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果。

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解决方案:递归分析三步:
  1. 找整个递归的终止条件:递归应该在什么时候结束?
  2. 找返回值:应该给上一级返回什么信息?
  3. 本级递归应该做什么:在这一级递归中,应该完成什么任务?
  • 问题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();//移除元素
}

参考资料

posted @ 2019-11-17 14:02  zdyyy  阅读(167)  评论(0编辑  收藏  举报