实验8

学号 20182315 《数据结构与面向对象程序设计》实验八报告

课程:《程序设计与数据结构》
班级: 1823
姓名: 邹家伟
学号:20182315
实验教师:王志强
实验日期:2019年X月X日
必修/选修: 必修

1.实验内容

  • 参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)

  • 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL.

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

  • 输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果

2. 实验过程及结果

  • 实验一即选择性理解书上的代码,重点理解先序与后序中序得细微区别。

  • 实验二需巧妙运用两次递归, 顺序为常规顺序,先右后左。
    实验8_第1张图片

  • 实验3建立决策二叉树,方法简单,只需存入你想出现得字符串,在运用其中相应得构造方法,即可完成建树,再使用几个if判断左移右移得方法,即可完成决策二叉树得建立。
    实验8_第2张图片

  • 实验4,将先序转为后序存起来遇到很大麻烦,起初不知道如何操作才能使数字元素按顺序排好。经搜索得,可将数字与运算符分别存入两个栈中,读到运算符时,比较该运算符与栈顶运算符得先后顺序,选择放入数字栈里还是存入运算符栈里。
    实验8_第3张图片

3. 实验过程中遇到的问题和解决过程

  • 问题1:在完成实验2的过程中发现,自己对于中中后序的理解还是不够深入,无法通过三者的联系发现规律。

  • 问题1解决方案:以此实验为例,首先根据前序,找到其根节点,再转向中序,中序找到该节点,节点前就是左二叉树,节点右就是有二叉树,先查找左二叉树,
  • 问题2:在实验四中,如图所示,起初没有声明对象直接将所有bottom写入栈中,使得盛放运算符的栈不合理。

实验8_第4张图片

  • 问题2解决方案:将你想存入的内容写成一个实例化结点,将该节点存栈,否则存入button节点其所自带的next也会保留下来,输出时,一个个next将所有的内容输出出来。

  • 调试代码时,这几段代码屡屡报错,经单步调试后发现原因。
    实验8_第5张图片
  • 调试发现原因,这几段代码涉及数据存入取出,而数据取出的时候,也应进行相应的类型转换。

其他(感悟、思考等)

本实验的难点在实验4,本次实验4是一个比较综合的实验题,考到了前面所用的知识,这样我意识到期末考试来临了,不光Java,其他科目都应该进行幸运复习。。。

参考资料

  • 递归全解

  • 递归解决树的问题

你可能感兴趣的:(实验8)