博客
关于我
2017—2018 20162329 张旭升 实验报告:树
阅读量:798 次
发布时间:2023-04-16

本文共 2061 字,大约阅读时间需要 6 分钟。

实验二:数

课程信息

课程:程序设计与数据结构

班级:1623
姓名:张旭升
学号:20162329
指导教师:娄嘉鹏、王志强
实验日期:10月23日

实验基本信息

实验密级:非密级

预习程度:已预习
必修/选修:必修
实验序号:cs_29
实验名称:二叉树、树型结构的实现及应用


实验内容

一、实现二叉树

参考教材p375,完成链树LinkedBinaryTree的实现(getRight, contains, toString, preorder, postorder)

  • 方法实现

    • getRight():获取右子树
    • contains(T target):查找某元素是否存在
    • isEmpty():判断树是否为空
    • toString():树的打印方法
    • preorder():树的先序遍历方法
    • postorder():树的后序遍历方法
  • 测试与提交

    使用JUnit或自行编写驱动类对实现的LinkedBinaryTree进行测试,提交测试代码运行截图,包含学号信息。将代码托管平台上推送至代码托管平台。


二、中序先序序列构造二叉树

基于LinkedBinaryTree,实现基于(中序、先序)序列构造唯一一棵二叉树的功能。

  • 实现思路

    根据中序和先序序列,通过递归的方式构造二叉树。先序序列的第一个元素为根结点,中序序列按根结点分割左右子树,递归处理左右子树。

  • 代码实现

    public BTNode reConstructBinaryTree(T[] pre, T[] in) {    BTNode root = new BTNode(pre[0]);    int len = pre.length;    if (len == 1) {        root.left = null;        root.right = null;        return root;    }    // 查找中序序列中的根节点    int i;    for (i = 0; i < len; i++) {        if (root.getElement().equals(in[i])) break;    }    // 创建左子树    if (i > 0) {        T[] preLeft = new Object[i];        T[] inLeft = new Object[i];        for (int j = 0; j < i; j++) {            preLeft[j] = pre[j + 1];            inLeft[j] = in[j];        }        root.left = new LinkedBinaryTree(preLeft, inLeft);    }    // 创建右子树    if (len - i - 1 > 0) {        T[] preRight = new Object[len - i - 1];        T[] inRight = new Object[len - i - 1];        for (int j = i + 1; j < len; j++) {            preRight[j - i - 1] = pre[j];            inRight[j - i - 1] = in[j];        }        root.right = new LinkedBinaryTree(preRight, inRight);    }    return root;}
  • 测试截图

    提交测试代码运行截图,包含学号信息。


三、决策树

完成PP16.6,提交测试代码运行截图,包含学号信息。

  • 实现思路
    以二叉树的形式构建一个决策树,每个结点代表一个问题,用户通过回答选择路径,最终到达结论结点。

四、表达式树

完成PP16.8,提交测试代码运行截图,包含学号信息。

  • 实现思路
    将中缀表达式转换为后缀表达式,再构建表达式树。中缀表达式中的运算符优先级高的先处理,优先处理括号,其余按顺序处理。

五、实现二叉查找树

完成PP17.1,提交测试代码运行截图,包含学号信息。

  • 实现思路
    基于二叉树实现查找最小值和最大值的方法,与第一个实验类似,书上已定义接口和部分方法,需补充缺失方法。

六、红黑树源码分析

分析红黑树和HashMap的实现,重点比较两者的结构、性能和适用场景。


实验要求

  • 完成实验并撰写实验报告,实验报告以博客方式发表在博客园。
  • 实验报告重点突出运行结果、遇到的问题及解决方法,分析从中可以得到的启示。
  • 严禁抄袭,发现行为者实验成绩归零并附加其他惩罚措施。

  • 实验成果

    通过本次实验,熟悉了二叉树、二叉查找树、红黑树的实现原理和应用场景,掌握了中序、先序序列构造二叉树的方法,并对决策树和表达式树的实现有了初步理解。

    转载地址:http://sjgfk.baihongyu.com/

    你可能感兴趣的文章
    mysql CONCAT()函数拼接有NULL
    查看>>
    multiprocessing.Manager 嵌套共享对象不适用于队列
    查看>>
    multiprocessing.pool.map 和带有两个参数的函数
    查看>>
    MYSQL CONCAT函数
    查看>>
    multiprocessing.Pool:map_async 和 imap 有什么区别?
    查看>>
    MySQL Connector/Net 句柄泄露
    查看>>
    multiprocessor(中)
    查看>>
    mysql CPU使用率过高的一次处理经历
    查看>>
    Multisim中555定时器使用技巧
    查看>>
    MySQL CRUD 数据表基础操作实战
    查看>>
    multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
    查看>>
    mysql csv import meets charset
    查看>>
    multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
    查看>>
    MySQL DBA 数据库优化策略
    查看>>
    multi_index_container
    查看>>
    mutiplemap 总结
    查看>>
    MySQL Error Handling in Stored Procedures---转载
    查看>>
    MVC 区域功能
    查看>>
    MySQL FEDERATED 提示
    查看>>
    mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
    查看>>