20172324 2018-2019-1《程序设计与数据结构》实验2报告

20172324 2018-2019-1《程序设计与数据结构》实验2报告

课程:《程序设计与数据结构》
班级: 1723
姓名: 曾程
学号:20172324
实验教师:王志强
实验日期:2018年9月30日
必修/选修: 必修

一、实验内容

链表练习

  • 实验一:参考教材p212,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder

    1. 用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
  • 实验二:基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能
    1. 比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树

    2. 用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息

  • 实验三:自己设计并实现一颗决策树

  • 实验四:输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果
    1. 如果没有用树,则为0分
    2. 提交测试代码运行截图,要全屏,包含自己的学号信息
  • 实验五:完成PP11.3

二、实验过程及结果

  • 实验1结果截图:

    • LinkedBinaryTree中有给出getLeft的方法,所以根据所给的getLeft补写出getRight方法
    • 书上说:contains方法留作程序设计项目,它可以使用find方法判定目标元素是否存在于树中
    • LinkedBinaryTree要补写preorder,postorder,LinkedBinaryTree中给出了inorder的方法,根据inorder写出preorder和postorder
  • 实验2结果截图:

    • 前序是:根左右的顺序,中序是左根右的顺序。首先找root,前序的第一个是root;观察前序,除根之外的必在左右子树;观察中序,root左侧的为左子树,右侧的为右子树;在左子树和右子 树中根据前序再判断谁是根;同样道理,以此类推
  • 实验3结果截图:

  • 实验4结果截图:

  • 实验5结果截图:

  • 实验6分析:

    三、实验过程中遇到的问题和解决过程

  • 问题一:实验四的思考过程

  • 问题一解决方案:根据上学期学习的后缀表达式的特点,我们可以知道,只要是运算符的就都是根结点。我们这里需要使用一个栈来保存字符。遍历后缀表达式,每当遇到是非运算符的字符,就将它入栈,当遇到是运算符,就将栈中前两个结点出栈,和运算符组成一棵子树,然后入栈。遍历完成后,栈中剩下的唯一的一个结点就是该后缀表达式的二叉树的根结点。但是做着做着发现好像和书上提供的代码是一样的,Java实验肯定不会只是书上的代码,然后仔细分析了题目发现和书上不一样的地方在书上是直接输入后缀表达式,实验要求的是利用树将中缀转后缀之后再用后缀表达式计算。大概想法就变成了将表达式的每一个元素进行拿出,按照数字、加减运算符、乘除运算符分成三种情况,用两个栈或者链表进行保存加减和构成树的结点。

四、其他(感悟、思考等)

五、参考资料

猜你喜欢

转载自www.cnblogs.com/amberR/p/9942355.html