【C/C++ 数据结构 】二叉树基本性质:对于任何一颗二叉树T,若其终端结点为n0 ,那么度数为2的结点数为n2。则n0=n2+1

117 阅读3分钟

这个结论是基于二叉树的性质得出的。我们可以通过归纳法来证明这个结论。

首先,我们定义几个概念:

  1. 终端结点(也叫叶子结点):没有子结点的结点。
  2. 度数为2的结点:有两个子结点的结点。

现在,我们来证明对于任何一颗二叉树T,若其终端结点为n0,那么度数为2的结点数为n2,则n0 = n2 + 1。

基础情况:

对于一颗只有一个结点的二叉树(即根结点),它没有度数为2的结点(n2 = 0),并且有一个终端结点(n0 = 1)。所以,n0 = n2 + 1。

归纳步骤:

假设对于所有高度小于h的二叉树,这个结论都是成立的。现在我们来考虑一颗高度为h+1的二叉树T。

  1. 如果T的根结点是一个终端结点,那么T只有一个结点,这个情况我们已经在基础情况中证明过了。

  2. 如果T的根结点有一个子结点,那么这个子树的高度为h。根据归纳假设,子树中终端结点的数量n0'和度数为2的结点数量n2'满足n0' = n2' + 1。对于整颗树T,终端结点的数量n0 = n0',度数为2的结点数量n2 = n2'。所以,n0 = n2 + 1。

  3. 如果T的根结点有两个子结点,那么这两个子树的高度都小于h。根据归纳假设,每个子树中终端结点的数量n0'和度数为2的结点数量n2'满足n0' = n2' + 1。对于整颗树T,终端结点的数量n0 = n0'左 + n0'右,度数为2的结点数量n2 = n2'左 + n2'右 + 1(加1是因为根结点的度数为2)。所以,n0 = (n2'左 + 1) + (n2'右 + 1) = n2'左 + n2'右 + 2 = n2 + 1。

通过这三种情况,我们证明了对于高度为h+1的二叉树,n0 = n2 + 1也成立。

综上所述,通过归纳法我们证明了对于任何一颗二叉树T,若其终端结点为n0,那么度数为2的结点数为n2,则n0 = n2 + 1。


为了展示这个结论在实际二叉树中是如何工作的,我将提供一个具体的二叉树示例,并分析其结点的度数和数量。

考虑以下二叉树:

    A
   / \
  B   C
 /   / \
D   E   F

在这颗二叉树中:

  • A、B、C是度数为2的结点(n2 = 3)
  • D、E、F是终端结点(n0 = 3)

根据我们的结论,n0 应该等于 n2 + 1。在这个例子中,3 = 3 + 1并不成立。这似乎与我们的结论相矛盾。

但是,我们需要注意的是这个结论是基于所有结点都遵循二叉树的定义来的,即每个结点的度数要么是0,要么是2。在这个例子中,结点B和C的度数为1,这不符合我们的假设条件。

为了使结论成立,我们可以添加两个虚拟的终端结点(用X表示)来补全二叉树:

    A
   / \
  B   C
 /|   |\
D X   E F

现在,我们有:

  • A、B、C是度数为2的结点(n2 = 3)
  • D、E、F、X、X是终端结点(n0 = 5)

现在,n0 = n2 + 1 成立,因为 5 = 3 + 1。

通过这个例子,我们可以看到当二叉树中的每个结点的度数要么是0,要么是2时,n0 = n2 + 1 的结论是成立的。如果树中有度数为1的结点,我们可以通过添加虚拟的终端结点来使结论成立。