实验二实验报告

实验过程

实验2.1

  • 实验内容:
    • 参考教材p375,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)

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

  • 实验过程
    • 这个实验主要是完善书上已给出的几个代码,再针对它们写一个测试类或者驱动类来验证编写类的正确性即可。在BTNode里面有中序遍历方法,下面留下来先序和后序给我们自己完善,这个课上已经讲过了。而在LinkedBinaryTree中剩下的几个方法在前面都有类似的参照。对比着完成了。
  • 遇到的困难及解决方法:
    • 这次的测试类里面我创建的是一个驱动测试类而不是以前一直用的单元测试,第一次输出的先后序遍历结果有错误,经过代码复查,我发现我在编写BTNode里面的preord和postord方法的时候时是照着中序写的,left.inorder这种调用没有改成相应的顺序表达式方法,如下面应调用left.preorder。修改完毕后测试驱动类的构建输出的结果和asserEqual测试过的方法均正确。
    public void preorder(ArrayIterator<T> iter) {iter.add(element);if (left!=null)left.preorder(iter);if (right!=null)right.preorder(iter);} 

image

实验2.2

  • 实验内容:
    • 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如教材P372,给出HDIBEMJNAFCKGL和ABDHIEJMNCFGKL,构造出附图中的树

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

  • 实验过程
    • 这个实验我是根据CSDN上别人发布的一个java的中先序构数的代码来完成的,原代码里输出的是Integer类型,我通过把设置的结点和方法全部换成String后就可以完成实验2.2的要求了。核心代码学习:这个代码的核心方法跟我在上课中学到的,在学习博客总结中总结的类似:用先序的第一个元素也就是根将中序表达式分割为左右子树,再根据左右子树的根结点继续划分成更小的子树,在划分到最小单元也就是prestart=preend,instart=inend时,也就是先后序遍历到的最小树长度为1时:返回的都是叶子结点。返回这些结点就可以输出树。同样采用了递归的思路。
    public static TreeNode reConstructBinaryTreeCore(String[] pre, String[] in, int preStart, int preEnd, int inStart, int inEnd) {TreeNode tree = new TreeNode(pre[preStart]);tree.left = null;tree.right = null;if (preStart == preEnd && inStart == inEnd) {return tree;}int root = 0;for(root= inStart; root < inEnd; root++){if (pre[preStart] == in[root]) {break;}}int leifLength = root - inStart;int rightLength = inEnd - root;if (leifLength > 0) {tree.left = reConstructBinaryTreeCore(pre, in, preStart+1, preStart+leifLength, inStart, root-1);}if (rightLength > 0) {tree.right = reConstructBinaryTreeCore(pre, in, preStart+1+leifLength, preEnd, root+1, inEnd);}return tree;}
  • image

实验2.3

  • 实验内容
    • 完成PP16.6,提交测试代码运行截图,要全屏,包含自己的学号信息。
    • 提交测试代码运行截图,要全屏,包含自己的学号信息。
  • 实验过程
    • 修改教材十六章的代码,将自己想要的问题和答案做成二叉树,再用自己实现的基础二叉树实现出来。我的二叉树:
      image
      核心代码学习:
    public void diagnose(){Scanner scan = new Scanner(System.in);LinkedBinaryTree<String> current = tree;System.out.println ("可供选择的材料如下:金,铁,铜,塑料。回答“Y”表示同意,回答“N”表示不同意。");System.out.println();while (current.size() > 1){System.out.println (current.getRootElement());if (scan.nextLine().equalsIgnoreCase("N"))current = current.getRight();elsecurrent = current.getLeft();}System.out.println (current.getRootElement());}

    dignose是书上backpain诊断病痛类型的方法。这种通过客户输入来确定下一步操作的方法很久没有接触过了,之后的团队项目游戏里面可能要经常用到,在这里mark一下:

    (scan.nextLine().equalsIgnoreCase("N"))。

    image

### 实验四

  • 实验内容
    • 完成PP16.8,提交测试代码运行截图,要全屏,包含自己的学号信息
  • 实验过程
    我在查阅了网上的一些资料后采取了别人实现的一种与我们在栈的后缀表达式生成中用的近似的方法:在不涉及括号的时候奇数个数据抽出来形成一个数组,偶数位符号抽出来形成一个数组,再用两个数据元素和一个符号数组组成一个子树,这样逐级上溯到根节点。值得注意的是:构建的时候从最深层的子树往上追溯,一直到根节点结束。可以发现:有叶子结点都是数据元素,父结点都是计算符。本题中用到的计算表达树是:
    image
  • 遇到的困难及解决过程
    在计算后缀表达式的时候我遇到了困难,最终我输出的后缀表达式是一个void类型的方法输出的表达式,我不太清楚怎么调用这个输出的结果,比如我们之前在栈那一章节里面用的计算方法需要读取String类型的表达式,但是我在网上也没有查到能直接将void类型转换成string类型的方法,毕竟void类型本身有时候就是无类型定义方法的通用归类。我只能采取手动输入的方式来调用后缀表达式计算方法了。
    image

### 实验五

  • 实验内容:完成PP17.1,提交测试代码运行截图,要全屏,包含自己的学号信息
  • 实验过程:这个查找树应该更形象地称之为老师说的排序树更合适,add方法在添加的时候是按照顺序添加的,比父节点小的元素在左子树上添加,如果已经有左子结点与左子结点比较这样循环。这样最终输出的时候finmin即输出中序表达式的第一个元素即可,findmax输出最后一个元素即可。
    image

转载于:https://www.cnblogs.com/cs162315/p/7745368.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ViewPager外部获取“当前显示的页面的位置position”

设置onPageChangeListener方法即可 viewPagerl.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}Overridepublic void onPageSelected(int position) {…

高效update方案

--方案1&#xff1a;如果有索引&#xff0c;先把索引删除后&#xff0c;再update&#xff0c;最后把索引重新创建一下因为索引对update影响很大。--方案2:1.create table newA as select id,name,age1 age from A;2.drop table A;3.rename newA to A--方案3:set autocommit 100…

使用cron表达式 设置定时任务

主要讲解cron表达式。其实只需要掌握6个通配符表达的意思&#xff0c;就可以了。 * * * * * * ┬ ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ | │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun) │ │ │ │ └───── month (1 - 12) │ │ │ └────────── day …

jmeter之录制控制器与代理的使用

jmeter之录制控制器与代理的使用 1. 先启动jmeter&#xff0c;在测试计划中添加线程组 2. 选中线程组右键添加&#xff0c;在配置元件中点击HTTP请求默认值 3. 选中线程组右键添加&#xff0c;在逻辑控制器中点击录制控制器 4. 工作台中&#xff0c;右…

工作139:生命周期

生命周期是生命周期 执行函数是执行函数 没有必然关系

为什么要进行归一化处理?(从寻找最优解这个角度讨论)

例子 假定为预测房价的例子&#xff0c;自变量为面积&#xff0c;房间数两个&#xff0c;因变量为房价。 那么可以得到的公式为&#xff1a; 其中代表房间数&#xff0c;代表变量前面的系数。 其中代表面积&#xff0c;代表变量前面的系数。 首先我们祭出两张图代表数据是否均一…

Android 获取触摸点坐标,判断滑动方向,滑动距离,滑动速度

activity 或 fragment 实现接口 View.OnTouchListener 如&#xff1a;public class MyFragment extends Fragment implements View.OnTouchListener{ 重写实现方法 Overridepublic boolean onTouch(View v, MotionEvent event) {//继承了Activity的onTouchEvent方法&#xff…

微信小程序 点击按钮 退出

一般右上角的圈圈就可以退出&#xff0c;但是有些场景&#xff0c;需要在页面中点击一下&#xff0c;进行退出。 需要使用navigator实现。 官方文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/component/navigator.html 代码如下&#xff0c;可以自己设置…

支付宝错误提示: sign check fail: check Sign and Data Fail JSON also

细节决定命运 &#xff0c;真是体会深刻&#xff01; 支付宝报错&#xff1a;sign check fail: check Sign and Data Fail JSON also 支付宝签名文件错误&#xff0c;查了好几天&#xff0c;密钥、公钥也重新生成了&#xff0c;支付宝也有交易流水&#xff0c;但是查询网关交易…

redis安装笔记

下载redis 官网下载地址&#xff1a;http://redis.io/download github下载地址&#xff1a;https://github.com/MSOpenTech/redis/tags 根据系统版本下载对应版本&#xff0c;下载完放置你要放的盘 然后cmd进入命令行&#xff0c;进入redis目录&#xff0c;然后输入启动命令 re…

vscode 配置 路径别名 @

为了保证多个项目复用代码&#xff0c;我喜欢把路径别名设置为&#xff0c;下面介绍vscode中的配置方法。 1、安装插件Path Intellisense 2、配置 "path-intellisense.mappings": {"": "${workspaceRoot}/src" }3、在项目package.json所在同级…

Android Studio新建类头部注释和添加函数注释模板及快捷键

依次点击——>左上角File——>Setting...——>Editor——>File and Code Templates ——>Includes——>File Header 输入 /** *作者&#xff1a;created by meixi *邮箱&#xff1a;13164716840163.com *日期&#xff1a;${DATE} ${HOUR} */ HOUR------&g…

支付宝支付提示 4006 ISV权限不足

4006 ISV权限不足&#xff0c;查了好几天&#xff0c;终于有结果了&#xff1a;是签约账号已经失效&#xff0c;若要使用接口的话&#xff0c;需要重新签约接口才可以&#xff0c;匹配到正确的接口就可以了。

小程序 canvas 设置 字体 字号加粗

之前的版本使用 现在直接使用CanvasContext.font即可 例如 this.ctx2.font normal bold 40px sans-serif;

关于小码哥kylin

技术格言: 用双手改变人生,用代码改变世界! 个人网站:http://www.isainttech.com QQ:56619556 Email:dragonsaintqq.com 微信:kylin10219556 Kylin开发技术交流群:540749978 转载于:https://www.cnblogs.com/kylinsblog/p/7760383.html

android studio 错误: 找不到符号 符号: 方法 xxx() 位置: 类 xxx

删除libs下对于的jar文件 使用依赖映入该jar包 如&#xff1a;错误: 找不到符号 符号: 方法 getLayoutPosition() 位置: 类型为NewsAdapter.ViewHolder的变量 holder 解决方法是&#xff1a; 删除libs文件夹下。。。xxx-v7-recyclerview.jar包 依赖引入jar包 compile(c…

小程序 mpvue 使用canvas绘制环形图表

本来想用css3来实现&#xff0c;发现轮廓边上残影严重&#xff0c;所以直接用小程序的canvas使用来。 最终效果如下&#xff1a; 我的整页代码如下&#xff0c;里面已经写出备注来。 <template><div class"statistic"><canvas canvas-id"runCa…