关于二叉树属性的一些困惑关于外部节点数 = 内部节点数 + 1

问题描述 投票:0回答:1

每个人都会同意,如下所示,这是一棵有效的二叉树。

* (R)
 \
  \
   * (C)

上面标记为 R 的二叉树节点是根节点,标记为 C 的节点是子节点。 这不是一个完整的二叉树,其中一个节点恰好有两个子节点,或者没有。 但上面的是一棵二叉树。

在二叉树中,我们有一个属性

|external nodes| = |internal nodes| + 1

也就是说,用文字来说

The number of external nodes is one more than the number of internal nodes.

其中外部节点是没有子节点的节点。 内部节点是具有 1 或 2 个子节点的节点。

但是上面图中显示的树这个属性似乎不成立? 我的理解有误吗?

data-structures tree binary-tree discrete-mathematics recursive-datastructures
1个回答
0
投票

根据 Ellis Horowitz 和 Sartaj Sahani 所著的《数据结构基础》一书。

For any nonempty binary tree, if A is the number of leaf nodes, and C is the number of nodes of degree 2, then A = C + 1

节点的度是该节点的子树数量。因此,如果一个节点有一个子节点或相当于一个子树,则其度数为 1;如果该节点有两个子节点或两个子树,则其度数为 2;如果没有子节点,则其度数为 0。

Lemma : For any nonempty binary tree T, if A is the number of leaf nodes, and C is the number of nodes of degree 2, then A = C + 1

证明: 设 B 为 1 度节点数,N 为节点总数。由于二叉树 T 中的所有节点的度数最多为 2,因此我们有

            N = A + B + C  -------------(1)

如果我们统计二叉树的边,我们会发现有 N - 1 条边。存在 N - 1 条边是因为每条边都将某个节点连接到其父节点,并且除根之外的每个节点都有一个父节点。令 E 代表边,则 N = E + 1。

此外,由于所有分支都源自 1 或 2 度的节点。 因此,E = B + 2C

因此,我们得到

             N = E + 1 = B + 2C + 1    --------(2)

由于 N = A + B + C 以及 N = B + 2C + 1,如果我们从 A + B + C 中减去 B + 2C + 1,那就是这样

      N - N = (A + B + C) - (B + 2C + 1) 

      0 = A - C - 1
      or A = C + 1;

但是 A 是叶节点的数量,C 是有 2 个子节点的节点。

因此,这种关系仅在没有子树或没有子树的节点与有 2 个子树或 2 个子树的节点之间成立。

因此出现了问题中的场景:-

   * (R)
    \
     \
      * (C)

不会出现。因为R是有1个子树的节点,C是叶节点。事实上对于这种二叉树,上述关系成立,因为图中的上述二叉树中不存在有两个子树的节点,这里有 2 个子树的节点为 0。由于有一个叶节点,因此关系

     |Leaf Nodes| = |Nodes having 2 subtrees| + 1

用引理表达。

© www.soinside.com 2019 - 2024. All rights reserved.