学号20182323 2019-2020-1 《数据结构与面向对象程序设计》实验八报告
课程:《程序设计与数据结构》
班级: 1823
姓名: 曹骞
学号: 20182323
实验教师:王志强
实验日期:2019年10月21日
必修/选修: 必修
1.实验内容
1.参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)
用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台
2.基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二?树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树
用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台
3.自己设计并实现一颗决策树
提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台
4.输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(如果没有用树,正常评分。如果用到了树,即使有小的问题,也酌情给满分)
提交测试代码运行截图,要全屏,包含自己的学号信息
2. 实验过程及结果
-
实验八(1):
这是二叉树的链式实现形式,将一些数分为左右两边放进去就行。
-
实验八(2)
上课所学,我们可以利用先序或者后序确定一下根,然后再利用这个根来在中序中找到属于左子树的部分以及右子树的部分,最后使用递归就行。
-
实验八(3)
该决策树反映的是根据顾客的年龄、身份、信用度,来预测顾客是否会在商城中购买computer。我没有用输入命令实现决策二叉树,而是将决策树的结构以输出的方式写了出来
-
实验八(4)
用栈实现
3. 实验过程中遇到的问题和解决过程
-
问题1:在实现二叉树的过程中,发现递归的优点,对它的缺点也提出了疑问。
-
问题1解决方式:查阅资料得知
缺点:
1.递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址以及临时变量,而往栈中压入数据和弹出数据都需要时间。->效率
2.递归中很多计算都是重复的,由于其本质是把一个问题分解成两个或者多个小问题,多个小问题存在相互重叠的部分,则存在重复计算,如fibonacci斐波那契数列的递归实现。->效率
3.调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出。->性能
其他(感悟、思考等)
实验八围绕着树的实现以及遍历知识点,决策树在app的设计中显得十分有用,它在实际生活中也十分适用。java学习,一点一点地积累知识,厚积薄发!