树、二叉树、哈夫曼树、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
  2. 非空二叉树上的叶节点数等于度为2的节点数+1,即 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
  3. 对完全二叉树按从上到下、从左到右的顺序依次编号1,…,n,有以下关系:
    • i > 1 i>1 i>1时,节点i的双亲的编号为 ⌊ i 2 ⌋ \lfloor \frac{i}{2}\rfloor 2i
    • 2 i ≤ n 2i\leq n 2in时,节点i的左孩子编号为2i,否则无左孩子
    • 2 i + 1 ≤ n 2i+1\leq n 2i+1n时,节点i的右孩子编号为 2 i + 1 2i+1 2i+1,否则无右孩子
    • 节点i所在层次(深度)为 ⌊ l o g 2 i ⌋ + 1 \lfloor log_2 i\rfloor+1 log2i+1
  4. 具有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
  5. i ≤ ⌊ n 2 ⌋ i\leq \lfloor \frac{n}{2} \rfloor i2n,则节点i为分支节点(节点 ⌊ n 2 ⌋ \lfloor \frac{n}{2} \rfloor 2n是编号最大的分支节点),否则为叶子结点
  6. 含有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
  7. 含有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
    • (前序序列和中序序列的关系相当于以前序序列为入栈次序,以中序序列为出栈次序)
  8. 平衡二叉树的深度与节点个数之间的极限关系:
    考虑深度为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个节点

哈夫曼树

  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

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个红节点

你可能感兴趣的:(数据结构,数据结构,算法)