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


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

    课程:《程序设计与数据结构》
    班级: ********
    姓名: ********
    学号:20182332
    实验教师:王*强
    实验日期:2019年10月28日
    必修/选修: 必修

    1.实验内容

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

    2.实验过程及结果:

    • 链树的实现:

    getRight |
    ---|---

       public LinkedBinaryTree<T> getRight()
        {
            LinkedBinaryTree node = new LinkedBinaryTree();
            node.root=root.getRight();
           // return new LinkedBinaryTree(root.getRight());
           return node;
        }
        
    

    contains |
    ---|---

       public boolean contains(T targetElement)
        {
            if (find(targetElement)==targetElement){
            return true;
        }
        else {
                return false;
            }
    
        }
        public T find(T targetElement) throws ElementNotFoundException
        {
            BinaryTreeNode<T> current = findNode(targetElement, root);
    
            if (current == null)
                throw new ElementNotFoundException("LinkedBinaryTree");
    
            return (current.getElement());
        }
        private BinaryTreeNode<T> findNode(T targetElement,
                                            BinaryTreeNode<T> next)
        {
            if (next == null)
                return null;
    
            if (next.getElement().equals(targetElement))
                return next;
    
            BinaryTreeNode<T> temp = findNode(targetElement, next.getLeft());
    
            if (temp == null)
                temp = findNode(targetElement, next.getRight());
    
            return temp;
        }   
        
        
    

    toString |
    ---|---

    public String toString()
        {
            UnorderedListADT<BinaryTreeNode> nodes =
                    new ArrayUnorderedList<BinaryTreeNode>();
            UnorderedListADT<Integer> levelList =
                    new ArrayUnorderedList<Integer>();
            BinaryTreeNode current;
            String result = "";
            int printDepth = this.getHeight();
            int possibleNodes = (int)Math.pow(2, printDepth + 1);
            int countNodes = 0;
    
            nodes.addToRear(root);
            Integer currentLevel = 0;
            Integer previousLevel = -1;
            levelList.addToRear(currentLevel);
    
            while (countNodes < possibleNodes)
            {
                countNodes = countNodes + 1;
                current = nodes.removeFirst();
                currentLevel = levelList.removeFirst();
                if (currentLevel > previousLevel)
                {
                    result = result + "
    
    ";
                    previousLevel = currentLevel;
                    for (int j = 0; j < ((Math.pow(2, (printDepth - currentLevel))) - 1); j++)
                        result = result + " ";
                }
                else
                {
                    for (int i = 0; i < ((Math.pow(2, (printDepth - currentLevel + 1)) - 1)) ; i++)
                    {
                        result = result + " ";
                    }
                }
                if (current != null)
                {
                    result = result + (current.getElement()).toString();
                    nodes.addToRear(current.getLeft());
                    levelList.addToRear(currentLevel + 1);
                    nodes.addToRear(current.getRight());
                    levelList.addToRear(currentLevel + 1);
                }
                else {
                    nodes.addToRear(null);
                    levelList.addToRear(currentLevel + 1);
                    nodes.addToRear(null);
                    levelList.addToRear(currentLevel + 1);
                    result = result + " ";
                }
    
            }
    
            return result;
        }
    
    
    
    

    preorder |
    ---|---

    public Iterator<T> iteratorPreOrder()
        {
            ArrayUnorderedList<T> tempList = new ArrayUnorderedList<T>();
           preOrder(root, tempList);
    
            return new TreeIterator(tempList.iterator());
        }
        
    protected void preOrder(BinaryTreeNode<T> node,
                                ArrayUnorderedList<T> tempList)
        {
            if(node!=null)
                {
                   System.out.print(node.getElement()+" ");
                    tempList.addToRear(node.getElement());
                    preOrder(node.getLeft(),tempList);
                    preOrder(node.getRight(),tempList);
                }
    
        }
    
    • 基于中序、先序序列构造树:
      • 二叉树前序遍历:先根节点,后左子树,再右子树。
      • 二叉树中序遍历:先左子树,后根节点,再右子树。
      • 二叉树中序遍历:先左子树,后右子树,再根节点。

    • 设计一棵决策树:

    • 中缀转后缀并计算:

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

    • 空指针异常

    • 解决方案:检查数据的传递,进行单步调试后发现是import了一个和实验无关的包,删除该import即可。

    感想

    实验有点难,借鉴了书上和网上的一部分代码。。。还需努力

    参考文献

  • 相关阅读:
    vue 文件分段上传
    深度clone
    js 导出excel
    js 校验
    设计模式原则
    多态
    数据库sql
    Redis快速入门
    C#中使用Redis学习二 在.NET4.5中使用redis hash操作
    在c#中使用servicestackredis操作redis
  • 原文地址:https://www.cnblogs.com/Stark-GR/p/11874363.html
Copyright © 2020-2023  润新知