树——树、二叉树、哈夫曼树的性质

树与二叉树

>树

树的基本术语

  • 祖先:根A到结点D的唯一路径上的任意结点都可称为结点D的祖先。
  • 双亲:相对于孩子在其上一级。
  • 分支结点:度大于0的结点。
  • 叶子结点:度等于0的结点。
  • 兄弟:有相同双亲的结点。

树的存储结构

  • 双亲表示法

  • 孩子表示法

  • 孩子兄弟表示法

    • 任意一棵树都能通过孩子兄弟表示法转换为二叉树进行存储。
  • 顺序存储表示法

定义

  1. 结点的层数从树根开始定义,根结点为第1层,它的子结点为第2层。

  2. 结点的深度是从根结点开始自顶向下逐层累加。

  3. 结点的高度是从叶结点开始自底向上逐层累加。

    树的高度等于结点的最大层数

树的重要性质

  • 树中的结点数等于 所有结点的度数之和 + 1

  • 高度为km叉树最多有(m k - 1) / (m - 1)个结点

>二叉树

  • 二叉树的通用公式

    n0=n2+1 (n0表示度为0的结点个数、n2表示度为2的结点个数)

    n=n0+n1+n2=2n2+n1+1 (二叉树中n1一般为0、*除了完全二叉树)

  • 满二叉树

    • 一颗高度为h,且含有2h-1个结点的二叉树称为满二叉树,即树中的每层都含有最多的结点。
    • 对满二叉树按层序编号:约定编号从根结点起,自上而下,自左而右。
      • 这样,每个结点对应一个编号,对于编号为i的结点,若有双亲,则其双亲为i/2,若有左孩子,则左孩子为2i;若有右孩子,则右孩子为2i+1。
    • 满m叉树第k层的结点数为mk-1
  • 完全二叉树

    • 一颗高度为h,且含有n个结点,每个结点编号与满二叉树中的编号一一对应称为完全二叉树。

    • 叶子结点只可能在层次最大的两层上出现。对于最大层次中的叶子结点,都依次排列在该层最左边的位置上。
    • 若有度为1的结点,则只可能有一个,且该结点只有 左孩子 而无右孩子。
    • 按层序编号后,一旦出现结点i为叶子结点或只有左孩子,则编号大于i的结点均为叶子结点。
    • 若n为奇数,则每个分支结点都有左孩子和右孩子;
      • 若n为偶数,则编号最大的分支结点只有 左孩子 ,没有右孩子。
      • 其余分支结点左右孩子都有。
    • 叶子结点个数等于总结点数/2(四舍五入)
  • 二叉树的存储结构

    1. 顺序存储结构
    2. 链式存储结构
  • 二叉树的遍历

    1. 先序遍历(MLR)

    2. 中序遍历(LMR)

    3. 后序遍历(LRM)

  • 树转换成二叉树

    口诀:左孩子,右兄弟。

>哈夫曼树

  • WPL(带权路径长度)

    树中所有叶子结点的带权路径长度之和。
    (路径长度根结点从0开始向下累加)
  • 哈夫曼树的构造

    WPL=5 x 2 + 2 x 3 + 4 x 3 + 7 x 2 + 9 x 2 = 60
posted @   ice_yolo  阅读(301)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示