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

 

课程:《程序设计与数据结构》
班级: 2023
姓名: 王梦欣
学号:20202315
实验教师:王志强
实验日期:2021年11月18日
必修/选修: 必修

## 1.实验内容

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

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

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

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

## 2.实验过程与结果

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

代码链接:

https://gitee.com/besti2023javads/wang-mengxin-20202315/blob/master/Node.java

https://gitee.com/besti2023javads/wang-mengxin-20202315/blob/master/BinaryTree.java

https://gitee.com/besti2023javads/wang-mengxin-20202315/blob/master/LinkedBinaryTree.java

https://gitee.com/besti2023javads/wang-mengxin-20202315/blob/master/LinkedBinaryTreeTest.java

运行截图:

 

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

   构造出附图中的树
   用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
   课下把代码推送到代码托管平台

首次编写运行使用int类型,发现受代码限制,二叉树中的节点只能是整形,后稍加修改。

代码链接:https://gitee.com/besti2023javads/wang-mengxin-20202315/blob/master/CreateTree.java(最初版代码)

最终版代码如下:

public class CreateTree {
    private int in = 0;
    private int pre = 0;
    public Node creatTree(Object[] preorder,Object[] inorder){
        return creat(preorder,inorder,Integer.MIN_VALUE);
    }

    private Node creat(Object[] preorder,Object[] inorder,Object stop){
        if(pre>=preorder.length)
            return null;
        if(stop.equals(inorder[in])){
            in++;
            return null;
        }
        Node node = new Node(preorder[pre++]);
        node.setLeftChild(creat(preorder,inorder,node.getValue()));
        node.setRightChild(creat(preorder,inorder,stop));
        return node;
    }
}

运行截图:

(第一次运行)

 

 (第二次运行)

 

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

 代码链接:https://gitee.com/besti2023javads/wang-mengxin-20202315/blob/master/LinkedBinaryTreeTest.java

运行结果截图:

 

 (4)输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(如果没有用树,正常评分。如果用到了树,

     即使有小的问题,也酌情给满分)
     提交测试代码运行截图,要全屏,包含自己的学号信息

 代码链接:https://gitee.com/besti2023javads/wang-mengxin-20202315/blob/master/Formaluetree.java

运行结果截图:

 

 

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

 - 问题1:关于类型转换,设置决策树的时候一开始持续报错
- 问题1解决方案:调用时要保持调用类型与原代码中类型保持一致。
- 问题2:决策树实现过程中一开始循环实现不了,持续报错
- 问题2解决方案:查询资料多次尝试之后皇天不负有心人。

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

 将中缀表达式转化为二叉树想起来很简单,实现好难啊,持续报错。每一个代码都是自己精心磨出来的孩子。

 

posted @ 2021-11-27 20:30  王梦欣  阅读(55)  评论(0编辑  收藏  举报