“完整的二叉树”,“严格的二叉树”,“全二叉树”之间的区别?
我对下面的树的术语感到困惑,我一直在研究这棵树,而我无法区分这些树:
a)完整的二叉树
b)严格的二叉树
c)完整的二叉树
请帮我区分这些树木。 数据结构中何时何地使用这些树?
维基百科产生
完整的二叉树(有时是二叉树或二叉树或严格二叉树)是一棵树,树叶中的每个节点都有两个孩子。
所以你没有节点只有一个孩子。 看起来和严格的二叉树一样。
这是一个完整/严格的二叉树的形象,从谷歌:
一个完整的二叉树是一个二叉树,其中除了最后一个以外的每个等级都被完全填充,并且所有的节点尽可能地离开。
这似乎意味着一棵平衡的树。
这里是一个完整的二叉树的图像,从谷歌,图像的全树部分是奖金。
完善:
x / \ / \ xx / \ / \ xxxx / \ / \ / \ / \ xxxxxxxx
完成:
x / \ / \ xx / \ / \ xxxx / \ / xxx
严格:
x / \ / \ xx / \ xx / \ xx
严格和完整的二叉树是有区别的。
1)完全二叉树:包含(2 ^ h)-1个元素的高度为h的二叉树被称为完整二叉树 。 (参考资料:Pg 427, C ++中的数据结构,algorithm和应用 [大学出版社],第二版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
免责声明 – 一些定义的主要来源是维基百科,任何改善我的答案的build议是受欢迎的。
虽然这篇文章有一个可以接受的答案,而且是一个很好的答案,但我仍然困惑不解,希望对这些术语之间的差异作出更多的澄清。
(1) 完整的二叉树 – 完整的二叉树是一棵二叉树,其中树叶以外的每个节点都有两个孩子。这也被称为严格二叉树 。
以上两者是完全或严格二叉树的例子。
(2) 完整的二叉树 –现在完整的二叉树的定义是非常模糊的,它表示: – 一个完整的二叉树是一个二叉树,其中除了最后一个以外的每个层次都被完全填充,并且所有节点都是尽可能地离开。 它可以有1到2小时的节点,尽可能地离开最后一级h
注意斜体的行。
含糊之处在于斜体字,“可能除了最后一个”,这意味着最后一层也可能被完全填满,即这个例外不一定总是被满足。 如果exception不成立,那么它就像我发布的第二个图像,也可以称为完美的二叉树 。 所以,一棵完美的二叉树也是完整而完整的,但反过来也是如此,这将通过我需要陈述的另一个定义来清楚:
几乎完整的二叉树当完全二叉树的定义中的exception存在时,它被称为几乎完整的二叉树或几乎完整的二叉树。 它只是一种完整的二叉树本身,但需要单独的定义来使其更明确。
所以一个几乎完整的二叉树看起来就像这样,你可以在图像中看到尽可能多的节点,所以它更像是完整的二叉树的一个子集,更严格地说,每个几乎完整的二叉树是一个完整的二叉树树,但不反之亦然。 :
从上面的结论回答,这是完整/严格,完整和完美的二叉树之间的确切区别
-
全/严格二叉树 : – 除叶节点以外的每个节点都有两个子节点
-
完整的二叉树 : – 除最后一级之外的每个级别都完全填充,所有节点都保持正确。
-
完美的二叉树 : – 除叶节点以外的每个节点都有两个孩子,每个级别(最后一级)都被完全填充。
考虑一个二叉树,其节点以树状方式绘制。 现在开始从上到下和从左到右编号节点。 完整的树具有以下属性:
如果n有孩子,那么编号小于n的所有节点都有两个孩子。
如果n有一个孩子,它必须是左边的孩子,小于n的所有节点都有两个孩子。 另外,没有大于n的节点有孩子。
如果n没有孩子,那么没有数量大于n的节点有孩子。
一个完整的二叉树可以用来表示一个堆。 它可以很容易地表示在连续的内存中,没有间隙(也就是说,除了最后可能存在的空间外,所有数组元素都被使用)。
完整的二叉树是一个完整的二叉树,但是反向是不可能的,如果二叉树的深度是n, (2 ^ n-1)。 二进制树中没有必要有两个孩子,但在完整的二进制文件中,每个节点都没有或两个孩子。
从基础开始,了解二叉树本身以了解二叉树的不同types是非常重要的。
树是二叉树当且仅当:
– 它有一个根节点,它可能没有任何子节点(0个子节点,NULL树)
-Root节点可能有1或2个子节点。 每个这样的节点都形成了本身的树
– 子节点的数量可以是0,1,2 …….不超过2
– 从根到每一个节点都有独特的path
例如:
X / \ XX / \ XX
来到您所查询的术语:
二叉树是一个完整的二叉树(高度为h,我们将根节点设为0)当且仅当:
等级0到h-1表示高度为h-1的完整二叉树
– h-1级中的一个或多个节点可能有0个或1个子节点
如果j,k是h-1级中的节点,那么当且仅当j在k的左边时,j具有比k更多的子节点,即,最后一级(h)可以丢失叶节点,但是存在的必须被转移到左边
例如:
X / \ / \ / \ XX / \ / \ XXXX / \ / \ / \ / \ XXXXXXXX
二叉树是严格二叉树当且仅当:
每个节点只有两个子节点或没有节点
例如:
X / \ XX / \ XX / \ / \ XXXX
二叉树是一个完整的二叉树当且仅当:
每个非叶子节点恰好有两个子节点
所有的叶子节点都在同一级别
例如:
X / \ / \ / \ XX / \ / \ XXXX / \ / \ / \ / \ XXXXXXXX / \ / \ / \ / \ / \ / \ / \ / \ XXXXXXXXXXXXXXXX
你也应该知道一个完美的二叉树是什么?
二叉树是一个完美的二叉树,当且仅当:
– 是一个完整的二叉树
– 所有的叶节点都在同一级别
例如:
X / \ / \ / \ XX / \ / \ XXXX / \ / \ / \ / \ XXXXXXXX / \ / \ / \ / \ / \ / \ / \ / \ XXXXXXXXXXXXXXXX
那么,我很抱歉无法发布图片,因为我没有10点声望。 希望这可以帮助你和其他人!
在我有限的二叉树经验中,我想:
- 严格二叉树 :除叶节点以外的每个节点都有两个子节点或只有一个根节点。
- 完全二叉树 :H严格(或完全)包含2 ^ H -1个节点的二叉树,很清楚每个级别中哪个节点数最多。
- 完整的二叉树 :它是一个二叉树,其中除了最后一个以外的每一个等级都完全被填满,并且所有的节点都尽可能地离开。
完全二叉树是一个二叉树,其中每个节点都有0个或2个孩子。 换句话说,除树叶之外的树中的每个节点恰好有两个孩子。
一个完整的二叉树是一棵二叉树,除了最后一层以外,树的每一层都被完全填满。 另外,在最后一级,应该从最左边的位置开始连接节点。 完整的二叉树必须满足以下条件:
- 如果a,b是最后一级以上级别的两个节点,那么当且仅当a位于b的左边时,a具有比b更多的子级。
- 从根节点开始,最后一级以上的级别表示高度为h-1的完整二叉树。
- 上一级中的一个或多个节点可能有0个或1个孩子。