“完全二叉树”,“严格二叉树”,“完整二叉树”之间的区别?

时间:2012-09-10 21:20:47

标签: data-structures tree binary-tree

我对下面的树的术语感到困惑,我一直在研究树,我无法区分这些树:

a)完整的二叉树

b)严格的二叉树

c)完整二叉树

请帮我区分这些树。 在数据结构中何时何地使用这些树?

12 个答案:

答案 0 :(得分:79)

完美树:

       x
     /   \
    /     \
   x       x
  / \     / \
 x   x   x   x
/ \ / \ / \ / \
x x x x x x x x

完整的树:

       x
     /   \
    /     \
   x       x
  / \     / \
 x   x   x   x
/ \ /
x x x

严格/完整树:

       x
     /   \
    /     \
   x       x
  / \ 
 x   x 
    / \
    x x 

答案 1 :(得分:64)

Wikipedia yielded

完整的二叉树(有时是适当的二叉树或2树或严格的二叉树)是一棵树,其中叶子以外的每个节点都有两个子节点。

所以你没有只有一个孩子的节点。看起来与严格的二叉树相同。

以下是来自Google的完整/严格二叉树的图片:

enter image description here

完整的二叉树是一个二叉树,其中除了可能是最后一个级别之外,每个级别都被完全填充,并且所有节点都尽可能地离开。

这似乎意味着一棵平衡的树。

这是一个完整的二叉树的图像,来自谷歌,图像的完整树部分是奖金。

enter image description here

答案 2 :(得分:47)

STRICT和FULL BINARY TREE之间存在差异。

1)FULL BINARY TREE:高度为h且包含精确(2 ^ h)-1个元素的二叉树称为完整二叉树。 (参考:Pg 427, C ++中的数据结构,算法和应用 [大学出版社],Sartaj Sahni的第二版)。

或换句话说

在一个完整的BINARY TREE中,每个节点都有正好0或2个子节点,并且所有叶子节点都处于同一级别。

例如:以下是完整的BINARY TREE:

          18
       /      \   
     15       30    
    /  \     /   \   
  40    50  100  40 

2)STRICT BINARY TREE:每个节点都有0或2个孩子。

例如:以下是STRICT BINARY TREE:

         18
       /     \   
     15       30    
    /  \          
  40    50

我认为在完整二进制树的定义中没有混淆,仍然是为了完整的帖子我想告诉完整的二叉树是什么。

3)完整的二进制树如果所有级别都被完全填充,则二叉树是完整的二进制树,除了可能的最后一级,最后一级的所有键都尽可能保留。

例如:以下是完整的BINARY TREE:

           18
       /       \  
     15         30  
    /  \        /  \
  40    50    100   40
 /  \   /
8   7  9 

注意:以下也是完整的二进制树:

         18
       /     \   
     15       30    
    /  \     /   \   
  40    50  100  40 

答案 3 :(得分:10)

免责声明 - 一些定义的主要来源是维基百科,欢迎任何改善我的答案的建议。

虽然这篇文章有一个公认的答案并且是一个很好的答案,但我仍然感到困惑,并希望对这些术语之间的区别进行更多澄清。

(1)完整的二进制树 - 完整的二叉树是一个二叉树,其中除了叶子之外的每个节点都有两个子节点。这也称为 严格二叉树

enter image description here enter image description here

以上两个是完整或严格二叉树的例子。

(2)完成二叉树 - 现在,完整二叉树的定义非常模糊,它指出: - 完整的二叉树是一个二叉树,其中每个级别,除外可能是最后一个,已完全填满,所有节点都尽可能远。 它可以在最后一级h

之间尽可能地保留1到2h节点

注意斜体的线条。

模糊性在于斜体线,"除了最后一个"这意味着最后一级也可以完全填满,即不必总是满足这种例外。如果异常不成立,则它与我发布的第二个图像完全相同,也可以称为完美二叉树。因此,一个完美的二叉树也是完整而完整的,但反之亦然,我需要说明的另一个定义是明确的:

ALMOST COMPLETE BINARY TREE - 当完整二叉树的定义中的异常成立时,它被称为几乎完整的二叉树或几乎完整的二叉树。它只是一种完整的二叉树本身,但需要单独的定义才能使其更加明确。

所以一个几乎完整的二叉树看起来像这样,你可以在图像中看到节点尽可能地离开,所以它更像是完整二叉树的一个子集,更严格地说每个几乎完整的二叉树是一个完整的二叉树,但反之亦然。 :

enter image description here

答案 4 :(得分:6)

从上面的答案得出结论,这是完整/严格,完整和完美的二叉树之间的确切区别

  1. 完整/严格二叉树: - 除叶节点外的每个节点都有两个子节点

  2. 完整的二叉树: - 除最后一级以外的所有级别都已完全填充,并且所有节点都是左对齐的。

  3. 完美的二叉树: - 除叶子节点外的每个节点都有两个子节点,每个级别(最后一级)也完全填满。

答案 5 :(得分:2)

考虑一个二叉树,其节点以树形方式绘制。现在开始从上到下,从左到右编号节点。完整的树具有以下属性:

如果n有子节点,则编号小于n的所有节点都有两个子节点。

如果n有一个孩子,那么它必须是左孩子,所有小于n的孩子都有两个孩子。此外,编号大于n的节点没有子节点。

如果n没有子节点,则编号大于n的节点没有子节点。

完整的二叉树可用于表示堆。它可以很容易地在没有间隙的连续存储器中表示(即除了最后可能存在的任何空间外,所有数组元素都被使用)。

答案 6 :(得分:2)

完整二叉树是一个完整的二叉树,但是反向是不可能的,如果二进制的深度是n,则为no。完整二叉树中的节点数是(2 ^ n-1)。在二叉树中没有必要它有两个子节点,但在完整的二进制文件中它每个节点都没有或两个子节点。

答案 7 :(得分:2)

从基础开始,了解二叉树本身以了解它的不同类型非常重要。

当且仅当: -

时,树才是二叉树

- 它有一个根节点,可能没有任何子节点(0个子节点,空树)

-Root节点可能有1个或2个子节点。每个这样的节点本身就形成了一个abinary树

- 子节点数可以是0,1,2 .......不超过2

- 从根到每个其他节点都有一条唯一的路径

示例:

        X
      /    \
     X      X
          /   \
         X     X

来到您的查询术语:

二进制树是一个完整的二叉树(高度为h,我们将根节点设为0)当且仅当: -

0级到h-1表示高度为h-1的完整二叉树

- 级别h-1中的一个或多个节点可能具有0或1个子节点

如果j,k是级别h-1中的节点,则j具有比k更多的子节点,当且仅当j在k的左侧时,即最后一级(h)可能缺少叶节点,但是在场的必须转移到左边

示例:

                          X
                     /          \
                   /              \
                 /                  \
                X                    X
             /     \              /     \
           X       X             X       X
         /   \   /   \         /   \    /  \ 
        X    X   X   X        X    X    X   X 

当且仅当: -

时,二叉树才是严格的二叉树

每个节点只有两个子节点或没有节点

示例:

         X
       /   \
      X     X 
          /   \
         X      X
        / \    / \ 
       X   X  X   X 

当且仅当: -

时,二叉树才是完整的二叉树

每个非叶子节点都有两个子节点

所有叶节点都处于同一级别

示例:

                          X
                     /          \
                   /              \
                 /                  \
                X                    X
             /     \              /     \
           X       X             X       X
         /   \   /   \         /   \    /  \ 
        X    X   X   X        X    X    X   X 
      /  \  / \ / \ / \      / \  / \  / \ / \ 
     X   X X  X X X X X     X  X  X X  X X X X 

您还应该知道完美的二叉树是什么?

当且仅当: -

时,二叉树才是完美的二叉树

- 是一个完整的二叉树

- 所有叶节点都处于同一级别

示例:

                          X
                     /          \
                   /              \
                 /                  \
                X                    X
             /     \              /     \
           X       X             X       X
         /   \   /   \         /   \    /  \ 
        X    X   X   X        X    X    X   X 
      /  \  / \ / \ / \      / \  / \  / \ / \ 
     X   X X  X X X X X     X  X  X X  X X X X 

嗯,很抱歉,我无法发布图片,因为我没有10个声望。 希望这能帮助你和其他人!

答案 8 :(得分:2)

在我对二叉树的有限经验中,我认为:

  1. 严格二叉树:除叶子节点外的每个节点都有两个子节点或只有一个根节点。
  2. 完整二叉树:严格(或确切)包含 2 ^ H -1节点 的H二叉树,很明显哪个每个级别都有最多的节点。
  3. 完整的二进制树:它是一个二叉树,其中除了可能是最后一个级别之外,每个级别都被完全填充,并且所有节点都尽可能地离开。

答案 9 :(得分:1)

让我们考虑一个高度为'h'的二叉树。如果所有叶子都以高度“ h”或“ h-1”出现,而序列中没有任何缺失数字,则该二叉树称为完整二叉树。

                   1
                 /   \
              2       3
            /    \         
         4        5

这是一个完整的二叉树。

                   1
                 /   \
              2       3
            /        /    
         4         6    

这不是完整的二叉树,因为序列中缺少5号节点

答案 10 :(得分:0)

如果每个节点都有0或2个子节点,则

full二进制树将已满。 叶节点的完整二进制数是内部节点数加1                      L = l + 1

答案 11 :(得分:0)

完整的二叉树: 除最低级别和所有叶子元素必须保留的一项主要内容外,所有级别均已完全填充。 严格的二叉树: 在这棵树中,每个非叶节点都没有子节点,即既没有左侧节点也没有右侧节点。 完整的二叉树: 每个节点都有零个孩子或两个孩子(从来没有一个孩子)。