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


80

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

a)完整的二叉树

b)严格的二叉树

c)全二叉树

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



6
不,不是,其中很多困惑
kTiwari

1
严格的二叉树:每个节点可以有2个子节点或根本没有节点
vikkyhacks 2014年

Answers:


73

维基百科产生

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

因此,您没有只有1个孩子的节点。似乎与严格的二叉树相同。

这是来自Google的完整/严格二叉树的图像:

在此处输入图片说明

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

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

这是来自Google的完整二叉树的图像,图像的完整树部分是奖励。

在此处输入图片说明


34
您的完整树示例还满足成为完整二叉树的条件,因此差异显然被模糊了,我认为您可能想举一个完整树的示例,该示例不是完整二叉树,反之亦然,这将使答案完成了:)
0decimal0年

1
完全二叉树和严格二叉树之间是有区别的。请参阅答案:stackoverflow.com/a/32064101/5237727
Saurabh Bhatia,2017年

2
同样,尽管所有完整树都是平衡树,但所有平衡树不一定都是完整树。
sfarbota

1
每个级别都被完全填满意味着什么?
lolololol ol

2
@lololololol表示可能存在该级别的所有节点。
山姆,我说是恢复莫妮卡的时间

86

完美树:

       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 

4
完美的二叉树是指OP引用的完整二叉树?
RBT

3
完美的二叉树既是严格/完整的二叉树,也可以是完整的二叉树,但反之亦然。

51

严格和完整二进制树之间是有区别的。

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

或者换句话说

在完整的二进制树中,每个节点恰好具有0或2个子节点,并且所有叶节点都处于同一级别。

例如:以下是完整的二进制树:

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

2)严格的二叉树:每个节点正好有0或2个孩子。

例如:以下是一个严格的二进制树:

         18
       /     \   
     15       30    
    /  \          
  40    50

我认为“完整二叉树”的定义没有任何混淆,但出于帖子的完整性,我想告诉您“完整二叉树”是什么。

3)完全二叉树:二叉树是完全二叉树,如果各级都完全填满,除了可能最后一级和最后一级具有左尽可能所有钥匙。

例如:以下是一个完整的二进制树:

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

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

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

您能否提供完整的二叉树定义的来源?它违背的一个维基百科被外包给了NIST
Calvin Li

@CalvinLi在完整二进制树的定义中提到了源。这里是PDF格式(PDF的PG 447)的链接- o6ucs.files.wordpress.com/2012/10/...
SAURABH巴蒂亚

@SaurabhBhatia,最后的表示形式对于完整的二叉树也适用。如果我错了纠正我。一个代表如何适用于不同品种?
玫瑰

10

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

尽管这篇文章的答案是可以接受的,而且是一个很好的答案,但我仍然感到困惑,我想对这些术语之间的区别进行更多的说明。

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

在此处输入图片说明 在此处输入图片说明

上面两个是完整或严格二叉树的示例。

(2)完整的二叉树-现在,完整的二叉树的定义是很模糊的,它指出:-完整的二叉树是一个二叉树,其中除最后一个外,每个级别被完全填充,并且所有节点都是尽可能左。在最后一级h,它可以具有1到2h个节点,并尽可能远

注意斜体行。

歧义在于斜体字中的行,“除了最后一个可能”,这意味着最后一个级别也可以完全填充,即不必总是满足此例外。如果异常不成立,则与我发布的第二张图片完全一样,也可以称为完善的二叉树。因此,一个完美的二叉树也很完整,但反之则不然,这需要我再声明一个定义:

几乎完整的二进制树-当完整二进制树的定义中的异常成立时,则将其称为几乎完整的二进制树或几乎完整的二进制树。它本身只是一种完整的二叉树,但是必须有一个单独的定义才能使其更加明确。

因此,几乎完整的二叉树看起来像这样,您可以在图像中看到节点尽可能地靠近左侧,因此它更像是完整二叉树的子集,更严格地说,每个几乎完整的二叉树都是完整的二叉树树,反之亦然。:

在此处输入图片说明


6

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

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

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

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


2

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

如果n有孩子,则所有少于n的节点都有两个孩子。

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

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

完整的二叉树可用于表示堆。它可以很容易地在没有间隙的连续内存中表示(即,使用所有数组元素,但不保留最后可能存在的任何空间)。


2

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


1
您不能严格地说“不可能逆转”,实际上您的这种假设在公认的答案中以完整树的示例
为准

1
如果二进制文件的深度为n,则为否。完整的二叉树中的节点数是(2 ^ n-1):但是完整的二叉树定义是一棵树,其中每个节点都是叶子或有两个孩子。所以最大可能没有。的儿童数为(2 ^ n-1),但可能小于该数。
mrida 2014年

2

从基础开始,了解二进制树本身以了解其不同类型非常重要。

一棵树是二叉树,当且仅当:-

–它具有一个根节点,该根节点可能没有任何子节点(0个子节点,NULL树)

–根节点可能具有1或2个子节点。每个这样的节点本身形成二叉树 

–子节点数可以为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个声誉,所以无法发布图片。希望这对您和其他人有帮助!


2

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

  1. 严格二叉树:除叶节点外,每个节点都有两个子节点或只有一个根节点。
  2. Full Binary Tree:完全(或完全)包含2 ^ H -1个节点的H的二进制树,很明显,每个级别的节点数最多。
  3. 完整的二叉树:这是一棵二叉树,其中除最后一个级别外,每个级别都已完全填充,并且所有节点都尽可能地靠左。

1
您对完整的二叉树的定义是不正确的,这就是完美的二叉树的定义。完整的二叉树与严格的二叉树同义。(来源:见严格二叉树:faculty.cs.niu.edu/~mcmahon/CS241/Notes/bintree.html)(来源:见完美二叉树:slideshare.net/ajaykumarc137151/...
基哥

1
哦,天哪,我现在很困惑,我将确保这一点。非常感谢。
BertKing

1
没问题:)看到下面@Lotus的答案,他把它钉牢了。我只是建议您对答案进行修改以反映这一点。
Keego

1

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

                   1
                 /   \
              2       3
            /    \         
         4        5

它是完整的二叉树。

                   1
                 /   \
              2       3
            /        /    
         4         6    

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



0

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


>在这棵树中,每个非叶节点都没有子节点,即左非叶节点或右非叶节点都必须至少有一个子节点,否则就是叶节点
nkrivenko
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.