• 青岛大学数据结构与算法——第5章


    一 概述

    • 树和二叉树的定义
    • 示例
    • 树和二叉树的抽象类型定义
    • 二叉树的性质和存储结构
    • 遍历二叉树和线索二叉树
    • 树和森林
    • 哈夫曼树

    二 树和二叉树的定义

    2.1 树的定义

    n个节点的有限集

    2.2 树的表示

    • 嵌套集合
    • 凹入表示
    • 广义表

    2.3 术语

    • 结点:数据元素以及指向子树的分支
    • 根结点:非空树中无前驱结点的结点
    • 结点的度:结点拥有的子树数
    • 树的度:树内各结点的度的最大值
    • 树的深度:树中结点的最大层次
    • 叶子/终端结点:度=0
    • 分支结点/内部结点/非终端结点:度!=0
    • 孩子:结点的子树的根
    • 双亲:结点称为孩子双亲
    • 祖先:从根到该结点所经分支上的所有结点
    • 子孙:以某结点为根的子树中的任一结点
    • 有序树:树中结点的各子树从左到右有次序
    • 无序树:树中结点的各子树无次序
    • 森林:m(m>=0)颗互不相交的树的集合

    2.4 树和线性结构的比较

    • 第一个元素
    • 最后一个元素
    • 其他元素

    2.5 二叉树

    • 普通树为何转换为二叉树
    • 二叉树定义:1根+互不相交的左右子树
    • 特点:不存在度大于2的结点、左右之分,次序不能颠倒
    • 5中基本形态:空二叉树、根+空左右子树、根+左子树、根+右子树、根+左右子树

    三 示例

    • 数据压缩问题
    • 二叉树求解表达式的值

    四 树和二叉树的抽象类型定义

    4.1 二叉树的抽象类型定义ADT BinaryTree

    4.2 操作

    • CreateBiTree
    • PreeOrderTraverse
    • InOrderTraverse
    • PostOrderTraverse

    五 二叉树的性质和存储结构

    5.1 性质

    • i层最多有2^(i-1)结点
    • 深度为k的二叉树最多有2^k-1个结点
    • 叶子数为n0,度为2的结点数n2,则n0=n2+1
    • 具有n个结点的完全二叉树深度为log2n+1
    • 完全二叉树结点特征:双亲结点i/2、左孩子2i、右孩子2i+1

    5.2 两种特殊形式

    • 满二叉树:深度k,有2^k-1个结点
    • 完全二叉树:满二叉树中,每个结点与编号对应(可不满)
    • 满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树

    5.3 存储结构

    • 顺序存储
    • 链式存储:二叉链表、三叉链表

    六 遍历二叉树和线索二叉树

    6.1 遍历二叉树

    • 遍历定义
    • 遍历目的
    • 遍历用途
    • 遍历方法:先(根)序遍历-DLR、中(根)序遍历-LDR、后(根)序遍历-LRD、二叉树的层次遍历
    • 示例:已知先序和中序,求二叉树、已知中序和后续,求二叉树
    • 应用:二叉树的建立、复制二叉树Copy、二叉树的深度Depth、二叉树结点总数NodeCount、叶子结点数LeadCount

    6.2 线索二叉树

    • 概念:线索(加上了指向的指针)、线索二叉树(加上了线索的二叉树)
    • 结构:lrchild-指向孩子的指针、rchild-指向孩子的指针、ltag、rtag

    七 树和森林

    7.1 树

    • 概念:n个结点的有限集
    • 存储结构:双亲表示法、孩子链表、孩子兄弟表示法
    • 树与二叉树的转换

    7.2 森林

    • 概念:m颗不相交的树的集合
    • 森林与二叉树的转换

    哈夫曼

    8.1 示例引入

    • 将学生的百分制成绩转换为五分制成绩
    • 最优二叉树

    8.2 概念

    • 路径
    • 结点的路径长度
    • 树的路径长度
    • 结点的带权路径长度
    • 树的带权路径长度

    8.3 说明

    • 满二叉树不一定是哈夫曼树
    • 哈夫曼树中权越大的叶子离根越近

    8.4 应用

    • 哈夫曼算法
    • 哈夫曼编码
    • 哈夫曼编码-解码

    九 图示

  • 相关阅读:
    Android 大图显示优化方案-加载Gif 自定义解码器
    【机器学习】图像语义分割常用指标Dice系数 敏感性 特异性 IOU及python代码实现
    仿淘宝商品详情大小图展示
    PlantUML 绘图
    第2次实验:Ethernet
    linux内核网络源码-用户空间与内核的接口
    Spring6 正式发布!重磅更新,是否可以拯救 Java
    模型训练中的常见超参数解析
    SpringBoot上传文件夹
    详解c++---类和对象(三)
  • 原文地址:https://blog.csdn.net/Calvin_zhou/article/details/126951068