【问题标题】:Proof by induction on binary trees二叉树上的归纳证明
【发布时间】:2014-03-06 20:47:46
【问题描述】:

现在我正在研究我的算法设计教科书中的一个问题,我遇到了一些难题。

问题是:

二叉树是一棵有根树,其中每个节点最多有两个 孩子们。归纳表明,在任何二叉树中, 有两个孩子的节点正好比叶子的数量少一。

我相当确定如何做到这一点:基本情况有一个节点,这意味着树有一个叶子节点和零节点以及两个孩子。但是,我不太确定归纳步骤究竟需要什么。

【问题讨论】:

  • 您是在问什么是归纳证明,或者针对这个特定任务的归纳证明是什么?
  • @MooingDuck 我已经知道什么是归纳证明,我只是不确定实际证明是什么。正如我所说,我知道如何证明基本情况 P(1),但我不知道如何证明某些 n 的 p(n + 1)。

标签: algorithm tree


【解决方案1】:

具有单个节点且没有子节点的树(显然)具有/是一个叶子。有两个孩子的节点数 (0) 正好比叶子数 (1) 少一。

向没有子节点的现有节点添加节点,不会改变有两个子节点的节点数,也不会改变叶子节点数。

将一个节点添加到具有一个子节点的现有节点中,具有两个子节点的节点数增加 1,叶数也增加 1。

您不能将节点添加到具有任何其他数量的子节点的现有节点。

由于有两个孩子的节点数一开始就比叶子数少一,并且向树中添加一个节点要么不会改变任何数字,要么会同时增加 1,因此它们之间的差异将始终是一个。

【讨论】:

  • 太棒了。它清除了我所有的疑问。我所做的只是敲我的脑袋来理解握手引理。
  • 我可能也无法解决它,直到 OP 说“归纳”。这通常意味着“证明事情对于简单节点是正确的”,并且“证明事情对于与真实节点相邻的节点是正确的”,然后你就完成了。我只是按照这些步骤操作。
【解决方案2】:

对具有 2 个子节点的节点数进行归纳:

Base - 0 个节点和 2 个子节点 - 1 个叶子节点(假设根不计为一个)。 步骤 - 让 T 成为具有 n+1 > 0 个节点和 2 个子节点的树

=> 有一个节点 a 有 2 个子节点 a1、a2 并且在以 a1 或 a2 为根的子树中没有节点有 2 个子节点。我们可以假设它是以 a1 为根的子树。

=> 删除以 a1 为根的子树,我们得到一棵树 T',它有 n 个节点和 2 个子节点。

=> T' 有 n+1 个叶子。

=> 以 a1 为根的子树添加到 T' - 我们添加了一个叶子和一个具有 2 个子节点的节点。

您需要完成一些漏洞,但它正在工作。 对不起我的英语不好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2015-11-20
    • 2016-04-19
    • 2014-03-29
    相关资源
    最近更新 更多