数据结构——握手引理与有趣的树特性

原文地址:Handshaking Lemma and Interesting Tree Properties

什么是握手引理(Handshaking Lemma)?

握手引理是关于无向图的。在每个有限的无向图中,奇数度的定点的个数总是偶数。握手引理是一个度数和公式的推论(有时候被称为握手引理)

vVdeg(v)=2|E|

在树的数据结构中握手引理到底有啥用处?

下面是一些可以用握手引理证明的有趣实例:

1)在一个k-ary树种,树种每个节点要么没孩子,要么有k个孩子,下列特性恒为真。

L = (k - 1)*I + 1
在这里 L = 叶子节点的数目
      I = 内部节点的数目  

证明:

证明可以分为两种情况:

情况1:(根节点是叶子节点):树中只有一个节点。对于只有一个节点L=1,I=0,上面的式子是成立的。

情况2:(跟节点是内部节点):对于多于一个节点的树,根一定是内部节点。上述的式子可以用握手引理证明。这个树是无向无环图。

树的总度数是节点数减一,例如:|E| = L + I – 1。

除了根,所有的内部节点在这种类型的树中的度数是k+1,根的度数是k。所有叶子节点的度数是1.将握手引理应用到这种树上,我们可以得到以下关系:

  Sum of all degrees  = 2 * (Sum of Edges)

  Sum of degrees of leaves + 
  Sum of degrees for Internal Node except root + 
  Root's degree = 2 * (No. of nodes - 1)

  Putting values of above terms,   
  L + (I-1)*(k+1) + k = 2 * (L + I - 1) 
  L + k*I - k + I -1 + k = 2*L  + 2I - 2
  L + K*I + I - 1 = 2*L + 2*I - 2
  K*I + 1 - I = L
  (K-1)*I + 1 = L   

所以用握手引理证明上面的特性,我们再讨论一个更有趣的特性。

2)在二叉树中,叶子节点的数目总是比有两个孩子节点的数目多1。

L = T + 1
在这里L=叶子节点的数目
     T=带有两个孩子的内部节点的数目 

证明:

设带有两个孩子的节点数目为T,可以分三种情况证明:

情况1:只有一个节点,那么关系为T = 0, L = 1。

情况2:根有两个孩子,例如:根的度是2:

   Sum of degrees of nodes with two children except root + 
   Sum of degrees of nodes with one child + 
   Sum of degrees of leaves + Root's degree = 2 * (No. of Nodes - 1)   

   Putting values of above terms,
   (T-1)*3 + S*2 + L + 2 = (S + T + L - 1)*2

   Cancelling 2S from both sides.
     (T-1)*3 + L + 2 = (S + L - 1)*2
     T - 1 = L - 2
     T = L - 1 

情况3:根只有一个孩子,例如根的度是1:

   Sum of degrees of nodes with two children + 
   Sum of degrees of nodes with one child except root + 
   Sum of degrees of leaves + Root's degree = 2 * (No. of Nodes - 1)   

   Putting values of above terms,
   T*3 + (S-1)*2 + L + 1 = (S + T + L - 1)*2

   Cancelling 2S from both sides.
     3*T + L -1 = 2*T + 2*L - 2
     T - 1 = L - 2
     T = L - 1 

因此在上面的三种情况中,我们得到T = L-1。

我们用握手引理讨论了树的两个重要的属性。

你可能感兴趣的:(Data,Structure)