我正在使用“ 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所示。此操作将删除一个内部节点和一个外部节点,并使该树成为适当的二叉树。重复此操作,最终我们将剩下一个由单个节点组成的最终树。注意,相同数量的外部和内部节点已被移除,并通过导致最终树的操作顺序放置在各自的堆上。现在,我们删除最终树的节点,并将其放置在外部节点堆上。因此,外节点堆比内节点堆多一个节点。
我刚刚开始学习算法,但是发现这位广为人知的作者很可笑,他绕道而行,努力改善n E =
n I` +1,
是的,顺便说一句,叶子(外部)从内部结点再来是一种堇青石。我认为证明“ 1 +1 = 2”或“这就是地球,外星人”非常愚蠢。
我错过了几点吗?
答案 0 :(得分:0)
是的,当然,叶子(外部)又是来自内部节点的。我认为证明“ 1 + 1 = 2”非常愚蠢
不确定我是否遵循您的证明。请考虑以下内容:
然后证明第2点提到的内部节点的短缺可以由第3点提到的内部节点的剩余来弥补。
当然可以用几种方法证明这一点,但是我认为将其与1 + 1 = 2进行比较是一个过分的简化。
另一方面,我同意两堆的故事有点过大,但可以帮助形象化事物。只需说内部节点数和外部节点数之间的差异随删除操作而不变即可。
另一种证明将是第二(递归)步骤,即删除两个同级外部节点。首先,我们必须证明当树不仅是一个节点时可以找到这样的一对:
让我们拿一片到根部距离最长的叶子。因为二叉树是正确的,所以此节点具有同级。我们也知道这个兄弟姐妹没有孩子,否则我们选择的叶子不是到根的距离最长的叶子。因此,我们得出结论,实际上我们总能找到一对外部兄弟节点。
此对同胞对的删除将其共享的父节点变为外部节点。我们注意到,我们维护了“适当的二叉树”属性。因此,我们删除了2个外部节点,并将一个内部节点转换为一个外部节点。因此,我们最终减少了一个外部节点和一个内部节点。不变性得以维持。我们注意到,我们总是可以重复此操作,直到只剩下一个节点,然后又是一个外部节点。
这不像1 +1 = 2那样简单,尽管我会理解您是否有偏好。