20202328 实验报告八《树》

1.实验内容

  • 参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)
  1. 用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
  2. 课下把代码推送到代码托管平台
  • 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树
  1. 用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
  2. 课下把代码推送到代码托管平台
  • 自己设计并实现一颗决策树
  1. 提交测试代码运行截图,要全屏,包含自己的学号信息
  2. 课下把代码推送到代码托管平台
  • 输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(如果没有用树,正常评分。如果用到了树,即使有小的问题,也酌情给满分)
  1. 提交测试代码运行截图,要全屏,包含自己的学号信息

 

        

2.实验过程及结果

完成链树LinkedBinaryTree的实现

 

 LinkedBinaryTree

 

 

 

BTNode

 

 

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

  • 扩展LinkedBinaryTree
  • public BTNode construct(char[] pre, char[] in) {
            if (pre.length == 0 || in.length == 0) {
                return null;
            }
            BTNode<Character> tree = new BTNode<Character>(pre[0]);
            int index = search(0, in.length, in, tree.getElement());
            tree.setLeft(construct(Arrays.copyOfRange(pre, 1, index + 1), Arrays.copyOfRange(in, 0, index)));
            tree.setRight(construct(Arrays.copyOfRange(pre, index + 1, pre.length),
                    Arrays.copyOfRange(in, index + 1, in.length)));
            return tree;
        }
        public int search(int start, int end, char[] inOrders, char data) {
            for (int i = start; i < end; i++) {
                if (data == inOrders[i]) {
                    return i;
                }
            }
            return -1;
        }
        public void preOrder(BTNode<T> Tree) {
            System.out.print(Tree.getElement() + " ");
            BTNode<T> leftTree = Tree.left;
            if (leftTree != null) {
                preOrder(leftTree);
            }
            BTNode<T> rightTree = Tree.right;
            if (rightTree != null) {
                preOrder(rightTree);
            }
        }
        public static void inOrder(BTNode tree) {
            if (tree == null)
                return;
            else {
                inOrder(tree.left);
                System.out.print(tree.print() + " ");
                inOrder(tree.right);
            }
        }
  • 结果
  •  

     

posted @ 2021-11-28 22:49  20202328马文瑞  阅读(52)  评论(0编辑  收藏  举报