课程:《程序设计与数据结构》
班级: 1723
姓名: 赵乾宸
学号:20172316
实验教师:王志强
必修/选修:必修


1.实验内容

1-实现二叉树

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

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

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

3-决策树

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

4-表达式树

输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果
提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台

5-二叉查找树

完成PP11.3
提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台

6-红黑树分析

参考http://www.cnblogs.com/rocedu/p/7483915.html对Java中的红黑树(TreeMap,HashMap)进行源码分析,并在实验报告中体现分析结果。
课下把代码推送到代码托管平台


2. 实验过程及结果

实验按照1-6顺序依次完成。

(1)LinkedBinaryTree的实现。

截图时未实现toString方法,后来添加了toString ,是以层序遍历的方式输出树。

(2)基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能

树的整体画在图上,为确定构造二叉树的正确性,输出了树的三种遍历,即最下三条,由上到下分别为先序、中序、后序

(3)自己设计并实现一颗决策树。

设计了一个关于“今晚去哪里学习/休息?”的决策树,由书中背部疼痛诊断器改造。

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

计算结果的树借用了书中例子,中缀转后缀比较复杂,也遇到了一些问题,在下方分析。

(5)完成PP11.3

实现removeMax findMin findMax 方法,
findMin方法主要部分截取:

if (root.left == null) {result = root.element;} else {BinaryTreeNode<T> current = root.left;while (current.left != null) {current = current.left;}result = current.element;}

实现的原理就是二叉查找树的左节点 < 父节点 < 右节点,最左的节点则是元素最小的节点,findMax同理。
removeMax则在find的基础上删除即可,由于删除的是最大节点,完全不用考虑会删除掉中间的节点导致树断开。

(6)


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

实验二-4,中缀转后缀,一开始没有思路,在网上各处查找相关文章,整理出来大致思路(↓码中注释↓),放在才最后解决

public String  toSuffix(String infix) {String result = "";String[] array = infix.split("\\s+"); // 以String数组存储中缀表达式的每个数字、符号Stack<LinkedBinaryTree> num = new Stack(); // 数字栈Stack<LinkedBinaryTree> op = new Stack(); // 操作符栈for (int a = 0; a < array.length; a++) {if (array[a].equals("+") || array[a].equals("-") || array[a].equals("*") || array[a].equals("/")) {  // 判断数组中字符类型(数字or操作符),分别装入两个栈中if (op.empty()) {op.push(new LinkedBinaryTree<>(array[a]));} else {if ((op.peek().root.element).equals("+") || (op.peek().root.element).equals("-") && array[a].equals("*") || array[a].equals("/")) {op.push(new LinkedBinaryTree(array[a]));  // 如果操作符栈中已经有“+、-”操作符而后来的的是“*、/”,压入op;若不是,进行树的构建,再压入op(优先级问题)} else {LinkedBinaryTree right = num.pop();LinkedBinaryTree left = num.pop();LinkedBinaryTree temp = new LinkedBinaryTree(op.pop().root.element, left, right);num.push(temp);                                                                 // 在num中构建好子树op.push(new LinkedBinaryTree(array[a]));  }}} else {num.push(new LinkedBinaryTree<>(array[a]));}}while (!op.empty()) {LinkedBinaryTree right = num.pop();LinkedBinaryTree left = num.pop();LinkedBinaryTree temp = new LinkedBinaryTree(op.pop().root.element, left, right);num.push(temp);}Iterator itr = num.pop().iteratorPostOrder(); // 以后序遍历输出构建好的整棵树,后缀表达式完成。while (itr.hasNext()){result += itr.next()+" ";}return result;}

中缀式构建为表达式树的流程例子↓


其他(感悟、思考等)

参考资料

《Java程序设计与数据结构教程(第二版)》
《Java程序设计与数据结构教程(第二版)》学习指导

转载于:https://www.cnblogs.com/zhaoqianchen/p/9943405.html

20172316 2018-2019-1 《程序设计与数据结构》实验二报告相关推荐

  1. 20172310 《程序设计与数据结构》实验二报告

    20172310 2017-2018-2 <程序设计与数据结构>实验二报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 仇夏 学号:20172310 实验教师:王志 ...

  2. python程序设计梁勇 百度网盘_20194220 2019-2020-2 《Python程序设计》实验二报告

    20194220 2019-2020-2 <Python程序设计>实验二报告 课程:<Python程序设计> 班级: 1942 姓名: 梁勇 学号:20194220 实验教师: ...

  3. python实验二报告_20172304 2019-2020-2 《Python程序设计》实验二报告

    20172304 2019-2020-2 <Python程序设计>实验二报告 课程:<Python程序设计> 班级: 1723 姓名: 段志轩 学号:20172304 实验教师 ...

  4. 20223405 李硕 2022-2023-2 《Python程序设计》实验二报告

    20223405 李硕 2022-2023-2 <Python程序设计>实验二报告 课程:<Python程序设计> 班级: 2234 姓名: 李硕 学号:20223405 实验 ...

  5. 2019燕山大学程序设计新生赛(二)

    2019燕山大学程序设计新生赛(二) 绝地武士 参考代码 织梦岛 参考代码 谍战风云 参考代码 绝地武士 天赋异禀的绝地武士安纳金·天行者受西斯大帝达斯·西迪厄斯蛊惑,堕入原力黑暗面,随后被派去绝地圣 ...

  6. 数据结构实验二 :二叉树的操作与实现

    数据结构实验一:线性表,堆栈和队列实现 数据结构实验二 :二叉树的操作与实现 数据结构实验三: 图的操作与实现 数据结构实验四 : 查找和排序算法实现 文章目录 一.实验目的: 二.使用仪器.器材 三 ...

  7. 计算机网络阅读报告,计算机网络实验二报告

    计算机网络实验二报告 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 计算机网络实验报告课程_ 计算机网络 _ 实验名称 TCP/ ...

  8. 北邮 计算机学院数据库实验报告二,北邮数据库_sql实验二报告.doc

    <北邮数据库_sql实验二报告.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<北邮数据库_sql实验二报告.doc>文档请在天天文库搜索. 1. ...

  9. 北京理工计算机实验二报告,北京理工大学计算机实验二报告表.doc

    <北京理工大学计算机实验二报告表.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<北京理工大学计算机实验二报告表.doc>文档请在天天文库搜索. ...

  10. 20172305 2017-2018-2 《程序设计与数据结构》实验二报告

    20172305 2017-2018-2 <程序设计与数据结构>实验报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 谭鑫 学号:20172305 实验教师:王志强 ...

最新文章

  1. 【OpenCV 4开发详解】图像卷积
  2. Android自定义View全解
  3. python setup用法_python的构建工具setup.py的方法使用示例
  4. 莱维飞行matlab作图,基于莱维飞行和随机游动策略的灰狼算法
  5. 昨天电脑问题 补昨日8-3复习内容 异常与文件操作
  6. Android Canvas 图形绘制
  7. 不再以讹传讹,GET和POST的真正区别
  8. 利用 IHttpHandler 自定义 HTTP 处理程序
  9. MongoDB入门系列(二):Insert、Update、Delete、Drop
  10. mysql 备用字段_数据库设计之备用字段
  11. python异常类父类_python【第五篇】异常处理
  12. C语言程序设计学习总结
  13. 单片机AC220V过零检测电路仿真及改进仿真
  14. linux部署springBoot项目不间断运行
  15. VUE组件日时分秒倒计时
  16. 火狐同步safari书签_如何将Safari浏览器的Chrome,Firefox和Internet Explorer书签同步
  17. ZCMU--5193: 韩信点兵(C语言)
  18. Python语言基础学习
  19. 1G→2G→3G→4G→5G:一部波澜壮阔的移动通信史
  20. After Effect(AE)PuppetTools脚本插件使用

热门文章

  1. python撤销_python 取消转义字符作用
  2. Python socket编程模拟最简单的HTTP响应
  3. 拉普拉斯变换公式表_工程数学中的积分变换的总结
  4. oracle非管理员锁表,oracle默认管理员的帐号和密码以及密码修改和解除锁定
  5. Ubuntu18.04 安装 nvidia2080Ti显卡驱动
  6. Windows Driver开发_NT Driver框架:The driver is not in a state to accept this command
  7. JavaScript的apply和call方法及其区别
  8. 专家:苹果有能力打造Mac芯片但不会去做
  9. mysql优化概述2
  10. 微信无法连接到服务器怎么诊断网络【微信高级教程3】