20182310实验八实验报告

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

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

1.实验内容

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

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

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

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

2.实验过程及结果

  • 实验1:
    实现二叉树的解决过程及结果
    关于先序遍历和后序遍历:
// 执行递归先序遍历。
    protected void preOrder(BinaryTreeNode node, ArrayUnorderedList tempList)
    {
        if (node != null)
        {
            tempList.addToRear(node.getElement());
            preOrder(node.getLeft(), tempList);
            preOrder(node.getRight(), tempList);
        }
    }
// 执行递归后序遍历。
    protected void postOrder(BinaryTreeNode node,
                             ArrayUnorderedList tempList)
    {
        if (node != null)
        {
            postOrder(node.getLeft(), tempList);
            postOrder(node.getRight(), tempList);
            tempList.addToRear(node.getElement());
        }
    }

20182310实验八实验报告_第1张图片

  • 实验2:
    中序先序序列构造二叉树的解决过程及结果
    在做这个实验的时候,特地寻找了关于构造二叉树的步骤
    整理如下:
  • 确定整棵二叉树的根节点即先序遍历中的第一个元素root
  • 确定root在中序遍历元素的位置,root左边的元素为二叉树的左子树元素Lchild,右边为右子树元素Rchild
  • 在先序遍历中找到最先出现Lchild中元素的那个元素,为Lchild的根节点——root的左孩子节点,同理找出Rchild的根节点——root的右孩子节点
  • 重复2,3步骤直至二叉树构建完成;
    20182310实验八实验报告_第2张图片

  • 实验3:
    自己生成一颗决策树
    20182310实验八实验报告_第3张图片

  • 实验4:
    表达式树的解决过程及结果
    主要注意的就是树的存放和符号左右两个操作数的顺序
    20182310实验八实验报告_第4张图片

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

  • 问题1:做实验1生成树的形状的时候,出现如下错误情况:
    20182310实验八实验报告_第5张图片

  • 问题1解决方法:在上网查阅资料,查询博客之后发现问题,修改toString方法,输出树状图案。
  • 问题2:在写实验三的决策树时,原本采用的是先写一个txt文件,再使用调用的方法,但无论我怎么修改路径,都无法成功。
  • 问题2解决方法:最后采用了重新编写了一个Java文件写决策类,运行后即可进行决策。

其他(感悟、思考等)

实验用到了很多书本上的代码,还有一些之前的类。关于树,是一门大学问,同时也让我觉得很多东西理解和代码实现不是一回事,理解了我也不知道如何精确下手。同时整理好代码很重要,之前没有好好整理,每次需要重新敲,也浪费了很多时间,在此提醒自己。

你可能感兴趣的:(20182310实验八实验报告)