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

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

一、实验内容

1.参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)
用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台

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

3.自己设计并实现一颗决策树
提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台

4.输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(如果没有用树,正常评分。如果用到了树,即使有小的问题,也酌情给满分)
提交测试代码运行截图,要全屏,包含自己的学号信息

二、 实验过程及结果

  • 树-1-实现二叉树
    要实现 LinkedBinaryTree 中的方法,首先要将结点类 BinaryTreeNode 补充完整。在结点类中,需要补充先序遍历和后序遍历的函数,由于这里用到了迭代器和递归的思路,所以直接参考中序遍历给出的函数即可

  • 树-2-中序先序序列构造二叉树

    (1)确定树的根结点;(先序遍历的第一个结点就是二叉树的根)
    (2)求解树的子树;(找到根在中序遍历的位置,位置左边就是二叉树的左孩子,位置右边是二叉树的右孩子,如果根结点左边或右边为空,那么该方向子树为空;如果根节点左边和右边都为空,那么根节点已经为叶结点)
    (3)对二叉树的左、右孩子分别进行步骤(1)(2),直到求出二叉树的结构为止。

  • 树-3-决策树

    决策树需要注意的就是不要搞混左子树和右子树的对象,在传递元素时可以参考书中的格式,先定义元素,再定义对应类型的树,之后再将元素依次实例化并填入构建的子树,根据回答迭代输出问题,直到只剩下最后一层叶结点,输出判定结果即可:

  • 树-4-表达式树

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

问题1:递归思想解决问题的核心是什么?
问题1解决方案:
找整个递归的终止条件,找返回值,本级递归应该做什么。

问题2:决策树不能往下走,只留在root节点。
问题2解决方案:建立决策树的时侯应该使用diagnose方法,用Scanner输入,判断语句来执行。

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

查找与排序是最为基本的数据结构算法,一个程序执行能力的高低取决于是否采用了一个好的算法,而一个好算法又很能考验程序员的功力,在这方面,我还有很长的路要走。

参考资料

posted @ 2019-11-17 17:06  20182331  阅读(177)  评论(0编辑  收藏  举报