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

Posted

技术标签:

【中文标题】“完全二叉树”、“严格二叉树”、“完全二叉树”之间的区别?【英文标题】:Difference between "Complete binary tree", "strict binary tree","full binary Tree"? 【发布时间】:2012-09-10 21:20:47 【问题描述】:

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

a) 完全二叉树

b) 严格二叉树

c) 完整的二叉树

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

【问题讨论】:

en.wikipedia.org/wiki/Binary_tree#Types_of_binary_trees 没有回答您的问题吗? 不,不是,这些之间有很多混淆 严格二叉树:每个节点可以有 2 个子节点或根本没有节点 web.cecs.pdx.edu/~sheard/course/Cs163/Doc/FullvsComplete.html 这是完整和完全二叉树的一个很好的例子。 【参考方案1】:

完美树:

       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 

【讨论】:

完美二叉树是指OP引用的完整二叉树? 完美二叉树既是严格/完全二叉树又是完全二叉树,但反之亦然。【参考方案2】:

Wikipedia yielded

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

所以你没有只有 1 个孩子的节点。看起来和严格的二叉树一样。

这是一张完整/严格二叉树的图片,来自 google:

完全二叉树是一种二叉树,其中除了可能的最后一层之外,每一层都被完全填满,并且所有节点都尽可能靠左。

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

这是一张完整二叉树的图片,来自谷歌,图片的完整树部分是奖励。

【讨论】:

您的完整树示例也符合完整二叉树的标准,因此差异显然很模糊,在我看来,您可能想举一个不是完整二叉树的完整树的示例,并且反之亦然,这将使答案完整:) 完全二叉树和严格二叉树是有区别的。参考答案:***.com/a/32064101/5237727 另外,虽然所有完整树都是平衡树,但所有平衡树不一定都是完整树。 每一关都被填满是什么意思? @lololololol 这意味着所有可能处于该级别的节点都存在。【参考方案3】:

严格二叉树和完整二叉树之间存在区别。

1) 完整二叉树:高度为 h 且恰好包含 (2^h)-1 个元素的二叉树称为完整二叉树。 (参考:第 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 的Wikipedia 上的内容相矛盾。 @CalvinLi FULL BINARY TREE 的定义中提到了来源。这是pdf的链接(pdf的第447页)-o6ucs.files.wordpress.com/2012/10/… @SaurabhBhatia,最后一个表示也适用于完整的二叉树。如果我错了纠正我。一种表示如何适用于不同的品种?【参考方案4】:

免责声明-一些定义的主要来源是***,欢迎任何改进我的答案的建议。

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

(1)FULL BINARY TREE- 完全二叉树是一种二叉树,其中除叶子之外的每个节点都有两个孩子。这也称为严格二叉树

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

(2)完全二叉树- 现在,完全二叉树的定义相当模糊,它指出:- 完全二叉树是一棵二叉树,其中每一层,除了可能是最后一个,完全填满,并且所有节点都尽可能地靠左。 它可以有 1 到 2h 个节点,尽可能在最左边,在最后一层 h

注意斜体字。

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

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

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

【讨论】:

【参考方案5】:

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

    完全/严格二叉树 :- 除了叶子节点之外的每个节点都有两个孩子

    完全二叉树:- 除最后一层外,每一层都被完全填满,所有节点左对齐。

    完美二叉树 :- 除了叶节点之外的每个节点都有两个孩子,并且每一层(也是最后一层)都被完全填满。

【讨论】:

【参考方案6】:

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

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

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

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

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

【讨论】:

【参考方案7】:

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

【讨论】:

你不能严格地说“不可能逆转”事实上你的这个假设在接受的答案中的完整树的例子中被违背了......你应该说可能是也可能不是可能 如果二进制的深度是 n 则没有。完整二叉树中的节点数为 ( 2^n-1 ):但完整二叉树定义是一棵树,其中每个节点要么是叶子,要么有两个孩子。所以最大可能没有。的孩子是 ( 2^n-1 ) 但它可能比这少。【参考方案8】:

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

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

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

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

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

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

例子:

        X
      /    \
     X      X
          /   \
         X     X

来到您询问的术语:

二叉树是一棵完全二叉树(高度为 h ,我们取根节点为 0 )当且仅当:-

Level 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 名声望,所以我无法发布图片。 希望这对您和其他人有所帮助!

【讨论】:

【参考方案9】:

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

    严格二叉树:除叶节点外的每个节点都有两个子节点或只有一个根节点。 Full Binary Tree:严格(或完全)包含 2^(H+1) -1 个节点的 H 的二叉树,很明显每个级别都有最多的节点。或者简而言之,所有叶节点都处于同一级别的严格二叉树。 完全二叉树:它是一棵二叉树,其中除了可能的最后一层之外,每一层都被完全填满,并且所有节点都尽可能靠左。

【讨论】:

你对完整二叉树的定义不正确,即完美二叉树的定义。完全二叉树与严格二叉树同义。 (来源:严格参见二叉树:faculty.cs.niu.edu/~mcmahon/CS241/Notes/bintree.html)(来源:参见完美二叉树:slideshare.net/ajaykumarc137151/…) 哦,天哪,我现在很困惑,我会确保这一点。非常感谢。 没问题 :) 见the answer by @Lotus below,他成功了。我只是建议对您的答案进行修改以反映这一点。【参考方案10】:

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

                   1
                 /   \
              2       3
            /    \         
         4        5

它是一棵完全二叉树。

                   1
                 /   \
              2       3
            /        /    
         4         6    

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

【讨论】:

【参考方案11】:

如果每个节点都有 0 或 2 个子节点,则完全二叉树是满的。 叶节点的完整二进制数是内部节点数加 1 L=l+1

【讨论】:

【参考方案12】:

完全二叉树: 除了最低层和一个主要的事情,所有的叶子元素都必须有左子元素,所有层都被完全填满。 严格二叉树: 在这棵树中,每个非叶节点都没有子节点,即既没有左也没有右。 完整的二叉树: 每个节点要么有零个孩子,要么有两个孩子(从来没有一个孩子)。

【讨论】:

> 在这棵树中,每个非叶节点都没有子节点,即既不左也不右 非叶节点必须至少有一个子节点,否则为叶节点

以上是关于“完全二叉树”、“严格二叉树”、“完全二叉树”之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

完全二叉树与满二叉树的区别是啥?

二叉树11:完全二叉树的节点个数

怎么判断是不是是完全二叉树 用C++或C语言

LeetCode Java刷题笔记—958. 二叉树的完全性检验

完全二叉树节点的计算(2021-8-3)

如何求完全二叉树的度为1的结点个数