证明二叉树中的节点数比叶子数少

时间:2017-10-23 04:49:43

标签: algorithm binary-tree

"二叉树中的完整节点是具有两个子节点的节点。证明a(非空)中的完整节点数 二叉树比叶子的数量少一个"

我遇到了这个问题,我不知道它在问我什么,因为我们还没有在讲座中做过这些问题。它要求我做什么以及如何做"证明"它?

谢谢

编辑:这就是我所做的。我不太确定这是否正确,但问题是我尝试使用英语而不是使用数学来解释它

"考虑到存在单个节点的基本情况,这意味着树具有单个叶子并且没有具有两个子节点的节点。这比叶子数少一个。如果将节点添加到具有0个子节点的节点,则具有两个子节点和叶子数的单个节点不会发生变化。如果将节点添加到具有子节点的节点,则具有两个子节点和叶数的节点数将增加1.总之,将节点添加到现有节点是不可能的。二叉树中节点之间的差异总是比叶子数少一个,因为尝试向树中添加节点不会改变或者将树和叶子的数量增加1。"

2 个答案:

答案 0 :(得分:2)

你的课程叫什么"二叉树"在数学中称为有根二进制树。只有有根树的子节点具有子节点的概念,在非根树中没有父子层次结构,所有节点都相等。该声明仅对非空根树有效。

以下是感应的详细证明。

  1. 感应碱。对于单节点树,该语句显然是正确的:它有一个叶子(根),没有完整的节点。
  2. 诱导步骤。假设对于具有 N 节点的所有有根二进制树,对于某些正整数 N ,该语句为真。给定具有 N + 1 节点的树 T ,选择叶 L 并将其删除。结果是具有 N 节点的树 T' ,其语句为true。假设 L 的父级是 L' 。有两种情况:

    • L' T' 中的一片叶子。然后 T T' 具有相同数量的叶子(因为一个叶子, L ,添加了一个节点, L' ,失去了它的叶子状态)。 T T' 中的完整节点数相同(因为相同的节点已满)。
    • L' T' 中只有一个孩子。然后 T 还有一个叶子比 T' (因为 L 是一个新的叶子)和一个比 T&更多的完整节点#39; (因为 L' 是一个新的完整节点)。

    在任何一种情况下,叶数和完整节点数之间的差异都不会改变。因此,对于具有 N + 1 节点的所有有根二进制树,该语句都是正确的。

  3. 根据归纳原则,对于所有正整数 N ,该陈述都是正确的。

    这个证明的一个更短(但仍然完全可以接受)的版本如下:

    • 使用其父节点折叠一个叶子。叶子数量和完整节点数量之间的差异不会改变。

    这个答案并不试图解释mathematical proof是什么,或提供构建证据的一般方法。

答案 1 :(得分:0)

fn = no. of full nodes 
l = no. of leaves
n = no. of nodes
h = height of tree

对于完整的树:

h = log (n+1)

没有。节点= 2 *完整节点+根

那是:

2 * fn +1 = n

另外,

l = 2^(h-1)

因为除了root之外的每一行中的节点数是前一行的两倍。

所以,

l= 2^ (log (n+1) -1) = (n+1)/2

或者,

n = 2 * l -1

从之前的扣除中:

2 * fn + 1 = 2 * l - 1

或者,

fn + 1 = l