树、二叉树、哈夫曼树、B树、B+树、红黑树相关计算

这篇具有很好参考价值的文章主要介绍了树、二叉树、哈夫曼树、B树、B+树、红黑树相关计算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 树中的节点数等于所有节点的度数之和+1(一个节点的孩子个数称为该节点的度)
  2. 度为m的树中第i层上至多有 m i − 1 m^{i-1} mi1个节点
  3. 高度为h的m叉树至多有 m h − 1 m − 1 \frac{m^h-1}{m-1} m1mh1个节点
  4. 具有n个节点的m叉树的最小高度是 ⌈ l o g m ( n ( m − 1 ) + 1 ) ⌉ \lceil log_m(n(m-1)+1)\rceil logm(n(m1)+1)⌉
  5. 度为m的树中,设度为k的节点个数为 n k n_k nk,则树中叶子节点个数为 ∑ k = 1 m ( k − 1 ) n k + 1 \sum_{k=1}^{m}(k-1)n_k+1 k=1m(k1)nk+1 n 0 + n 1 + . . . + n m = 1 n 1 + 2 n 2 + . . . + m n m + 1 n_0+n_1+...+n_m=1n_1+2n_2+...+mn_m+1 n0+n1+...+nm=1n1+2n2+...+mnm+1,即节点个数=所有节点的度数之和+1=边的个数+1)

二叉树

  1. 满二叉树定义:高度为h,且含有 2 h − 1 2^h-1 2h1个节点的二叉树(除叶节点外每个节点度数均为2)。下面的性质既适用于满二叉树,又适用于完全二叉树
    • 若根节点从1开始编号,对于编号i的节点,若有双亲,则双亲为 ⌊ i 2 ⌋ \lfloor \frac{i}{2}\rfloor 2i;若有左孩子,则左孩子为2i;若有右孩子,则右孩子为2i+1。节点i所在层次(深度)为 ⌊ l o g 2 i ⌋ + 1 \lfloor log_2 i\rfloor+1 log2i+1
    • 若根节点从0开始编号,对于编号i的节点,若有双亲,则双亲为 ⌊ i − 1 2 ⌋ \lfloor \frac{i-1}{2}\rfloor 2i1;若有左孩子,则左孩子为2i+1;若有右孩子,则右孩子为2i+2
  2. 非空二叉树上的叶节点数等于度为2的节点数+1,即 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
  3. 具有n个节点的完全二叉树的高度为 ⌈ l o g 2 ( n + 1 ) ⌉ \lceil log_2(n+1)\rceil log2(n+1)⌉ ⌊ l o g 2 n ⌋ + 1 \lfloor log_2n\rfloor+1 log2n+1
  4. i ≤ ⌊ n 2 ⌋ i\leq \lfloor \frac{n}{2} \rfloor i2n,则节点i为分支节点(节点 ⌊ n 2 ⌋ \lfloor \frac{n}{2} \rfloor 2n是编号最大的分支节点),否则为叶子结点
  5. 含有n个节点的二叉树必定存在n+1个空链域(n个节点共有 2 n 2n 2n个链域),除了根节点以外的每个节点(n-1个)都向上引出一条边(链域),因此空链域一共有 2 n − ( n − 1 ) = n + 1 2n-(n-1)=n+1 2n(n1)=n+1
  6. 含有n个节点的二叉树最多有 C 2 n n n + 1 = ( 2 n ) ! n ! ( n + 1 ) ! \frac{C_{2n}^{n}}{n+1}=\frac{(2n)!}{n!(n+1)!} n+1C2nn=n!(n+1)!(2n)!种形态(记住即可),等价说法:
    • 对于n个不同元素进栈,出栈序列的个数为 C 2 n n n + 1 \frac{C_{2n}^{n}}{n+1} n+1C2nn
    • 以序列a, b, c, d为入栈次序,则出栈序列的个数为14
    • 先序序列为a, b, c, d的不同二叉树的个数为14
    • 不同形态的二叉树的数目恰好是前序序列均为a,b,c,d的二叉树所能得到的中序序列的数目。而中序遍历的过程实质上是一个节点进栈和出栈的过程。二叉树的形态确定了其节点进栈和出栈的顺序,也确定了其节点的中序序列。由此,由前序序列a,b,c,d所能得到的中序序列的数目恰为数列a,b,c,d按不同顺序进栈和出栈所能得到的排列的数目,这个数目为 C 2 n n − C 2 n n − 1 = C 2 n n n + 1 C_{2n}^n-C_{2n}^{n-1}=\frac{C_{2n}^{n}}{n+1} C2nnC2nn1=n+1C2nn
    • (前序序列和中序序列的关系相当于以前序序列为入栈次序,以中序序列为出栈次序)
  7. 平衡二叉树的深度与节点个数之间的极限关系:
    考虑深度为h的平衡二叉树的最小节点数(或称为含有xx个节点的平衡二叉树的最大深度): C h = C h − 1 + C h − 2 + 1 , C 1 = 1 , C 2 = 2 C_h=C_{h-1}+C_{h-2}+1,C_1=1,C_2=2 Ch=Ch1+Ch2+1C1=1C2=2,其中 C h C_h Ch为高度为h的平衡二叉树的最少节点个数
    由此可得, C 3 = 4 , C 4 = 7 , C 5 = 12 , C 6 = 20 C_3=4, C_4=7, C_5=12, C_6=20 C3=4,C4=7,C5=12,C6=20,即含有20个节点的平衡二叉树的最大深度为6,具有五层节点的AVL树至少有12个节点

k叉树

  1. 严格的k叉树中只包含度为k、度为0的节点。即 n = n 0 + n k n=n_0+n_k n=n0+nk
  2. k n k = n − 1 kn_k=n-1 knk=n1,因为总共有 n k n_k nk个分支节点,共发出 k k k个分叉(为k叉树总分叉数量)。除了根节点外所有的节点头上都会有一个分叉。
  3. 由2得, n k = n 0 − 1 k − 1 n_k=\frac{n_0-1}{k-1} nk=k1n01,即如果是严格k叉树,则该式右面一定除得尽。因此与下面的m叉哈夫曼树构造类似,最佳归并树需要添加虚段的数量为:
    • 若 (初始归并段数量-1)%(k-1) = 0,说明刚好可以构成严格k叉树,此时不需要添加虚段
    • 若 (初始归并段数量-1)%(k-1) = u ≠ \ne = 0,则需要补充 (k-1)-u 个虚段

哈夫曼树

  1. 若哈夫曼树中有 n 0 n_0 n0个叶节点,则总共有 2 × n 0 − 1 2\times n_0-1 2×n01 个节点,且度为2的节点数为 n 0 − 1 n_0-1 n01
    • 思路:每次归并,少了两个节点,多出一个非叶子节点,整体节点数-1。最后归并结果是剩下一个节点(根节点),所以是归并了n-1次。因此最终的非叶子节点是n-1个
  2. 若度为m的哈夫曼树中,叶子节点个数为n,则非叶子节点的个数为 ⌈ n − 1 m − 1 ⌉ \lceil \frac{n-1}{m-1}\rceil m1n1
    • 思路:类似上述思路,每次归并,少了m个节点,多出一个非叶子节点,整体节点数-1。最后归并结果是剩下一个根节点,所以是归并了 ⌈ n − 1 m − 1 ⌉ \lceil \frac{n-1}{m-1}\rceil m1n1次,因此最终的非叶子节点数也是 ⌈ n − 1 m − 1 ⌉ \lceil \frac{n-1}{m-1}\rceil m1n1
  3. m叉哈夫曼树的构造:设有 n 0 n_0 n0个初始节点
    • 首先计算 t = ( n 0 − 1 ) m o d ( m − 1 ) t=(n_0-1) mod (m-1) t=(n01)mod(m1). 若t不为零,则补充 m − t m-t mt个权为0的节点到初始节点中;若t为零,则无需添加节点。

B树

  1. 除根节点外的所有非叶节点至少有 ⌈ m 2 ⌉ \lceil \frac{m}{2} \rceil 2m棵子树,即至少含有 ⌈ m 2 ⌉ − 1 \lceil \frac{m}{2}\rceil-1 2m1个关键字
  2. n个关键字的B树必有n+1个叶子节点(n个关键字将数域切分成n+1个区间)
  3. 含有n个关键字的m阶B树,树的高度h满足: l o g m ( n + 1 ) ≤ h ≤ l o g ⌈ m 2 ⌉ n + 1 2 + 1 log_m(n+1)\le h \le log_{\lceil \frac{m}{2}\rceil}\frac{n+1}{2}+1 logm(n+1)hlog2m2n+1+1
    • 最小高度:让每个节点尽可能满(即有m-1个关键字,m个分叉)。即 n ≤ ( m − 1 ) ( 1 + m + m 2 + . . . + m h − 1 ) = m h − 1 n\le (m-1)(1+m+m^2+...+m^{h-1})=m^h-1 n(m1)(1+m+m2+...+mh1)=mh1
    • 最大高度:让每个节点尽可能空(即根节点只有1个关键字,其他节点只有 ⌈ m 2 ⌉ − 1 \lceil \frac{m}{2}\rceil-1 2m1个关键字、 ⌈ m 2 ⌉ \lceil \frac{m}{2} \rceil 2m个分叉)。即第一层1个节点,第二层2个,第三层 2 ⌈ m 2 ⌉ 2\lceil \frac{m}{2}\rceil 22m个…第h层 2 ( ⌈ m 2 ⌉ ) h − 2 2(\lceil \frac{m}{2} \rceil)^{h-2} 2(⌈2m)h2个。由于n个关键字的B树必有n+1个叶子节点,因此有 n + 1 ≥ 2 ( ⌈ m 2 ⌉ ) h − 1 n+1\ge 2(\lceil \frac{m}{2} \rceil)^{h-1} n+12(⌈2m)h1,即 h ≤ l o g ⌈ m 2 ⌉ n + 1 2 + 1 h \le log_{\lceil \frac{m}{2}\rceil}\frac{n+1}{2}+1 hlog2m2n+1+1

红黑树

  1. 从根节点到叶节点的所有路径中,最长路径不会超过最短路径的两倍(保证红黑树大致上是平衡的)
  2. 具有n个内部节点的红黑树高度不超过 2 l o g 2 ( n + 1 ) 2log_2(n+1) 2log2(n+1)
  3. 在一个黑高是k的红黑树中,内部节点最多有 2 2 k − 1 2^{2k}-1 22k1个(即红黑节点相间隔情形),最少是 2 k − 1 2^k-1 2k1个节点
  4. 具有n个关键字的红黑树中红的内部节点数与黑的内部节点数之比最大是2:1
  5. 插入n(n>1)个节点形成的红黑树,至少有1个红节点

文章来源地址https://www.toymoban.com/news/detail-638667.html

到了这里,关于树、二叉树、哈夫曼树、B树、B+树、红黑树相关计算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 15哈夫曼树/哈夫曼编码

    哈夫曼树又称为 最优树 ,作用是找到一种效率最高的判断树。 路径 :从树中一个结点到另一个结点之间的 分支 构成这两个结点之间的路径。 结点的路径长度 :两结点间路径上的分支树 如图 a :从 A - D 的路径长度就是是 2。从 A 到 B C D E F G F I 的路径长度分别为 1 1 2 2 3

    2024年02月05日
    浏览(45)
  • 哈夫曼树、哈夫曼编码/解码

    哈夫曼树的基本介绍 哈夫曼树构建步骤图解 创建哈夫曼树代码实现 基本介绍 哈夫曼编码原理剖析 哈夫曼编码的实例 思路分析 代码实现 使用哈夫曼编码压缩文件的注意事项(代码胜省略)

    2024年02月08日
    浏览(42)
  • 哈夫曼树与哈夫曼编码

    哈夫曼树:结点中赋予一个某种意义的值,称为结点的权值,从根结点开始,到目标结点经过的边数,称为路径长度,路径长度乘以权值,称为带权路径长度; 例如:根结点代表着快递集散点,一个叶子结点权值是5,在业务逻辑中代表着重量是5斤的货物📦,路径长度是3,

    2024年02月05日
    浏览(49)
  • 哈夫曼树详解及其应用(哈夫曼编码)

    一,哈夫曼树的基本概念 路径: 从树中一个结点到另一个结点之间的 分支 构成这两个结点间的路径 结点的路径长度 :两结点之间路径上的 分支数 树的路径长度: 从 树根 到每一个结点的 路径长度之和 . 记作:TL 权(weight): 将树中结点赋给一个有着某种含义的数值

    2024年02月04日
    浏览(50)
  • 哈夫曼树、哈夫曼编码和字典树

    目录 哈夫曼树 树的带权路径长度(wpl) 哈夫曼编码 代码实现哈夫曼树 封装哈夫曼树的节点 构建哈夫曼树 字典树 执行流程 代码实现字典树 封装字典树的节点 构建字典树         哈夫曼树(Huffman Tree)是一种带权路径长度最短的二叉树。哈夫曼树常常用于数据压缩,其压

    2023年04月09日
    浏览(51)
  • 哈夫曼树,哈夫曼编码及解码详解

    🌍新人小白的博客 ⌛️希望大家多多关注 🌱一起加油,共同成长 🎃以后会经常更新哒~🙈 ⭐️个人主页: 收藏加关注,永远不迷路~⭐️ 一: 顺序表的操作,你真的学会了吗? 二: 顺序栈的基本操作 三: 循环队列的基本操作,你学会了吗? 四: 单链表的操作(超详细

    2024年02月05日
    浏览(46)
  • 搜索二叉树 | 红黑树 | 验证是否为红黑树 | 代码实现

    黑红树是一颗特殊的搜索二叉树,本文在前文的基础上,图解红黑树插入:前文 链接,完整对部分关键代码展示,完整的代码在gitee仓库中: 链接 文章中有错误的地方,欢迎大家指正!如果有帮助到你,也请多多点赞支持! 1.红黑树的概述 平衡二叉树要求左右子树的高度差

    2024年02月21日
    浏览(41)
  • 数据结构——哈夫曼树与哈夫曼编码

    1.1 基本概念 路径 :指从根结点到该结点的分支序列。 路径长度 :指根结点到该结点所经过的分支数目。 结点的带权路径长度 :从树根到某一结点的路径长度与该结点的权的乘积。 树的带权路径长度(WPL) :树中从根到所有叶子结点的各个带权路径长度之和。 哈夫曼树 是由

    2024年02月05日
    浏览(46)
  • 哈夫曼树与哈夫曼编码及等长编码

    哈夫曼树的构造:就是将给定的数据中选择最小的两个权值进行合并,然后重复该操作,构造出一个 二叉树。使其带权路径长度WPL最小的二叉树称为哈夫曼树或最优二叉树。 例如:给定几个数值:0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.01 可以将其扩大一百倍,以方便计

    2024年02月06日
    浏览(43)
  • 数据结构之哈夫曼树和哈夫曼编码

    切入正题之前,我们先了解几个概念: 路径:从树的一个结点到另一个结点分支所构成的路线 路径长度:路径上的分支数目 树的路径长度:从根结点出发到每个结点的路径长度之和 带权路径长度:该结点到根结点的路径长度乘以该结点的权值 树的带权路径长度:树中所有

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包