树-概念性总结及代码示例

Posted stormax

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树-概念性总结及代码示例相关的知识,希望对你有一定的参考价值。

总览:

  • 树的基本概念
  • 二叉树
  • 树和森林
  • 树与二叉树的应用

 

  1. 树的基本概念
    1. 树的定义:若干结点的集合,有唯一根结点,无环,结点个数可为0
    2. 树的基本术语:
      1. 结点的度:结点拥有的子树个数或者分支的个数
      2. 树的度:结点的度的最大值
      3. 叶子结点:终端结点
      4. 非终端结点:分支结点
      5. 树的深度:树中结点的最大层次数
      6. 结点的深度:从根结点到该结点路径上结点的个数
      7. 结点的高度:子树的深度
      8. 有序树与无序树
      9. 丰满树:理想平衡树,除最底层外其他都是满的
      10. 森林
    3. 树的存储结构
      1. 顺序存储结构
      2. 链式存储结构
        1. 孩子存储结构
        2. 孩子兄弟存储结构
  2. 二叉树
    1. 二叉树的定义
      1. 满二叉树:所有分支结点都有左儿子和右儿子,并且叶子结点都集中在最下一层
      2. 完全二叉树:除最后一层是满二叉树
    2. 二叉树的主要性质(教材P123)
      1. 在二叉树的第i层上之多有2^(i-1)个结点
      2. 深度为k的二叉树至多有(2^k)– 1个结点
      3. 对任何一颗二叉树T,如果其终端结点数为N0,度为2的结点数为N2,则N0 = N2 + 1
      4. 具有n个结点的完全二叉树的深度为[log2n] + 1 (向下取整)
      5. 如果一颗有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1 <= I <= n),有
        1. 如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲PARENT(i)是结点[i/2](向下取整)
        2. 如果2i > n,则结点i无左孩子(结点i为叶子结点);否则其左孩子LCHILD(i)是结点2i
        3. 如果2i + 1 > n,则结点i无右孩子;否则其右孩子RCHILD(i)是结点2i + 1
    3. 二叉树的存储结构
      1. 顺序存储结构:仅适用于完全二叉树,对于一般的二叉树会浪费大量存储空间
      2. 链式存储结构:最简单的存储结构 (左孩子,数据域,右孩子)
    4. 二叉树的遍历算法
      1. 先序遍历
      2. 中序遍历
      3. 后序遍历
    5. 二叉树遍历算法的改进
      1. 非递归实现:通过栈模拟递归的实现
      2. 线索二叉树:利用树中的空指针域记录结点的前驱
  3. 树和森林与二叉树的相互转换
    1. à 二叉树:右兄弟变右儿子
    2. 二叉树 à 树:右儿子变右兄弟
    3. 森林 à 二叉树:每棵树先转化为二叉树,然后从后往前将该树变为前一棵树的右儿子,直到变成一棵二叉树
    4. 二叉树 à 森林:砍右儿子,变成树
    5. 树和森林的遍历
      1. 先序遍历
      2. 后序遍历
  4. 树与二叉树的应用
    1. 二叉排序树与二叉平衡树
    2. 哈夫曼树和哈夫曼编码
      1. 相关概念:
        1. 路径:指从树的一个结点到另一个结点的分支所构成的路径。
        2. 路径长度:指路径上的分支数目。
        3. 树的路径长度:指从根到每个结点的路径长度之和。
        4. 带权路径长度:结点具有权值,从该结点到根之间的路径长度乘结点的权值,就是该结点的带权路径长度
        5. 树的带权路径长度(WPL):树中所有叶子结点的带权路径长度之和
      2. 构造方法:
        1. 将这n个权值跟别看成只有根节点的n棵二叉树,这些二叉树构成的集合记为F。
        2. 从集合F中取出权值最小的两个结点a,b构成一颗新的二叉树c,新二叉树的根节点的权值为其子结点的权值之和。
        3. 删去a,b,加入新构造的树c
        4. 重复2,3,直到F中只剩下一棵树位为止,这棵树就是哈夫曼树
      3. 哈夫曼树的特点:
        1. 权值越大的结点,距离根节点越近
        2. 树中没有度为1的结点。
        3. 树的带权路径长度最短。
      4. 哈夫曼编码
        1. 前缀码:任一字符的编码串都不是另一个字符编码串的前缀
        2. 哈夫曼编码产生最短的前缀码
      5. 哈夫曼n叉树
        1. 无法构造时补0

以上是关于树-概念性总结及代码示例的主要内容,如果未能解决你的问题,请参考以下文章

Spring Batch学习记录及示例项目代码

ref:关于JAVA中一些安全漏洞示例说明及如何规避方法代码示例总结分享

C# Apose Word 中的知识点详细的总结及代码示例

C++_继承详谈

C++_继承详谈

机器学习中的性能指标:精度召回率,PR曲线,ROC曲线和AUC,及示例代码