“完全二叉树”、“严格二叉树”、“完全二叉树”之间的区别?
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】:完全二叉树: 除了最低层和一个主要的事情,所有的叶子元素都必须有左子元素,所有层都被完全填满。 严格二叉树: 在这棵树中,每个非叶节点都没有子节点,即既没有左也没有右。 完整的二叉树: 每个节点要么有零个孩子,要么有两个孩子(从来没有一个孩子)。
【讨论】:
> 在这棵树中,每个非叶节点都没有子节点,即既不左也不右 非叶节点必须至少有一个子节点,否则为叶节点以上是关于“完全二叉树”、“严格二叉树”、“完全二叉树”之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章