博客
关于我
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/

    你可能感兴趣的文章
    mysql5.7的安装和Navicat的安装
    查看>>
    mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
    查看>>
    Mysql8 数据库安装及主从配置 | Spring Cloud 2
    查看>>
    mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
    查看>>
    MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
    查看>>
    MYSQL8.0以上忘记root密码
    查看>>
    Mysql8.0以上重置初始密码的方法
    查看>>
    mysql8.0新特性-自增变量的持久化
    查看>>
    Mysql8.0注意url变更写法
    查看>>
    Mysql8.0的特性
    查看>>
    MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    查看>>
    MySQL8修改密码的方法
    查看>>
    Mysql8在Centos上安装后忘记root密码如何重新设置
    查看>>
    Mysql8在Windows上离线安装时忘记root密码
    查看>>
    MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
    查看>>
    mysql8的安装与卸载
    查看>>
    MySQL8,体验不一样的安装方式!
    查看>>
    MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
    查看>>
    Mysql: 对换(替换)两条记录的同一个字段值
    查看>>
    mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
    查看>>