20192319 2020-2021-1 《数据结构与面向对象程序设计》实验八报告

实验七报告

  • 课程:《程序设计与数据结构》
  • 班级: 1923
  • 姓名: 李歆韵
  • 学号:20192319
  • 实验教师:王志强
  • 实验日期:2020年12月6日
  • 必修/选修: 必修

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进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
    课下把代码推送到代码托管平台
    代码:
public class LinkedBinaryTreeTest
{
    public static void main(String args[]) {
        //构建结点
        BinaryTreeNode node1 = new BinaryTreeNode(12);
        BinaryTreeNode node2 = new BinaryTreeNode(34);
        BinaryTreeNode node3 = new BinaryTreeNode(55);
        BinaryTreeNode node4 = new BinaryTreeNode(81);
        BinaryTreeNode node5 = new BinaryTreeNode(99);
        System.out.println("Node1: "+node1.getElement());
        System.out.println("Node2: "+node2.getElement());
        System.out.println("Node3: "+node3.getElement());
        System.out.println("Node4: "+node4.getElement());
        System.out.println("Node5: "+node5.getElement());
        //构建二叉树
        LinkedBinaryTree tree1 = new LinkedBinaryTree(node1.getElement());
        LinkedBinaryTree tree2 = new LinkedBinaryTree(node2.getElement());
        LinkedBinaryTree tree3 = new LinkedBinaryTree(node3.getElement(),tree1,tree2);
        LinkedBinaryTree tree5 = new LinkedBinaryTree(node5.getElement());
        LinkedBinaryTree tree4 = new LinkedBinaryTree(node4.getElement(), tree5, tree3);


//        node4.setLeft(node5);
//        node4.setRight(node3);
//        node3.setRight(node2);
//        node3.setLeft(node1);
        System.out.println("Tree: "+tree4.toString());
//        System.out.println("Is node1 a leaf? " + node1.isLeaf(node1));
//        System.out.println("Is node2 a leaf? " + node2.isLeaf(node2));
//        System.out.println("Is node3 a leaf? " + node3.isLeaf(node3));
//        System.out.println("Is node4 a leaf? " + node4.isLeaf(node4));
//        System.out.println("Is node5 a leaf? " + node5.isLeaf(node5));

        System.out.println("Is tree empty? " + tree4.isEmpty());

        System.out.println("Height of tree: "+tree4.getHeight());

        System.out.println("Does tree contain '19'? " + tree4.contains("19"));

        System.out.println("Get right child: "+tree4.getRight().toString());

        System.out.print("preorder: ");
        tree4.toPreString();
        System.out.println();
        System.out.print("postorder: ");
        tree4.toPostString();

    }
}


  1. 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和先序ABDHIEJMNCFGKL,构造出附图中的树
    用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
    课下把代码推送到代码托管平台
    代码:
public class LinkedBinaryTreeTest2
{
    public static void main(String[] args) {
        String[] inorder = new String[]{"H","D","I","B","E","M","J","N","A","F","C","K","G","L"};//中序
        String[] preorder = new String[]{"A","B","D","H","I","E","J","M","N","C","F","G","K","L"};//先序

        LinkedBinaryTree2 tree = new LinkedBinaryTree2();

        tree.RebuildTree(inorder,preorder);
        System.out.println(tree.toString());
    }
}

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

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

3.其它

这一次实验主要考察我们对树的结构以及其特点的掌握,涉及到了树的构建、通过前序与中序构造树还有决策树的构建。虽然在最后一个中缀转后缀中我没能用树的结构来实现,但是通过栈和队列两种线性结构来实现这个功能难度依然不小,花费时间较多。

参考资料

原文地址:https://www.cnblogs.com/Tempo-Alex/p/14104048.html