将内部节点与适当的二叉树中的外部节点相关联

时间:2018-11-30 06:33:48

标签: python algorithm tree

我正在使用“ Python中的数据结构和算法”学习二叉树

当作者指定“将内部节点与适当的二叉树中的外部节点相关联”时,其显示为

  

命题8.9:在具有nE个外部节点和n个内部节点的非空的适当二叉树T中,我们有n E = n I +1。

     

(``n E , n I和h表示节点数,外部节点数,内部节点数)

作者继续:

  

推论:我们通过从T中删除节点并将它们分成两个“堆”(一个内部节点堆和一个外部节点堆),直到T变空来证明这一主张是正确的。最初堆是空的。最后,我们将显示外节点堆比内节点堆多一个节点。我们考虑两种情况:

     
      
  • 情况1:如果T仅具有一个节点v,我们将v移除并将其放置在外部节点堆上。因此,外节点堆具有一个节点,而内节点堆为空。
  •   
  • 情况2:否则(T具有多个节点),我们从T中删除(任意)外部节点w和其父节点v,后者是内部节点。我们将w放在外部节点堆上,将v放在内部节点堆上。如果v有一个父u,则我们将u与w的前一个兄弟z重新连接,如图8.10所示。此操作将删除一个内部节点和一个外部节点,并使该树成为适当的二叉树。重复此操作,最终我们将剩下一个由单个节点组成的最终树。注意,相同数量的外部和内部节点已被移除,并通过导致最终树的操作顺序放置在各自的堆上。现在,我们删除最终树的节点,并将其放置在外部节点堆上。因此,外节点堆比内节点堆多一个节点。
  •   

Screen Shot 2018-11-30 at 1.14.14 PM

我刚刚开始学习算法,但是发现这位广为人知的作者很可笑,他绕道而行,努力改善n E = n I` +1, 是的,顺便说一句,叶子(外部)从内部结点再来是一种堇青石。我认为证明“ 1 +1 = 2”或“这就是地球,外星人”非常愚蠢。

我错过了几点吗?

1 个答案:

答案 0 :(得分:0)

  

是的,当然,叶子(外部)又是来自内部节点的。我认为证明“ 1 + 1 = 2”非常愚蠢

不确定我是否遵循您的证明。请考虑以下内容:

  1. 实际上,每个外部节点都有一个父(内部)节点,除非树由一个节点组成,但是
  2. 两个外部节点共享相同的父(内部)节点,因此上述情况将导致重复计算,并且
  3. 可能有几个内部节点,没有外部节点作为直接子节点。

然后证明第2点提到的内部节点的短缺可以由第3点提到的内部节点的剩余来弥补。

当然可以用几种方法证明这一点,但是我认为将其与1 + 1 = 2进行比较是一个过分的简化。

另一方面,我同意两堆的故事有点过大,但可以帮助形象化事物。只需说内部节点数和外部节点数之间的差异随删除操作而不变即可。

替代证明

另一种证明将是第二(递归)步骤,即删除两个同级外部节点。首先,我们必须证明当树不仅是一个节点时可以找到这样的一对:

让我们拿一片到根部距离最长的叶子。因为二叉树是正确的,所以此节点具有同级。我们也知道这个兄弟姐妹没有孩子,否则我们选择的叶子不是到根的距离最长的叶子。因此,我们得出结论,实际上我们总能找到一对外部兄弟节点。

此对同胞对的删除将其共享的父节点变为外部节点。我们注意到,我们维护了“适当的二叉树”属性。因此,我们删除了2个外部节点,并将一个内部节点转换为一个外部节点。因此,我们最终减少了一个外部节点和一个内部节点。不变性得以维持。我们注意到,我们总是可以重复此操作,直到只剩下一个节点,然后又是一个外部节点。

这不像1 +1 = 2那样简单,尽管我会理解您是否有偏好。