我对以下树的术语感到困惑,我一直在研究树,但是我无法区分这些树:
a) 完全二叉树
b) 严格二叉树
c) 满二叉树
请帮助我区分这些树。 这些树在数据结构中何时以及何地使用?
---我对下列树的术语感到困惑,我一直学习树,但我无法区分以下树:
a) 完全二叉树
b) 严格二叉树
c) 满二叉树
请帮我区分这些树。这些树在数据结构中何时和哪里使用?
我对以下树的术语感到困惑,我一直在研究树,但是我无法区分这些树:
a) 完全二叉树
b) 严格二叉树
c) 满二叉树
请帮助我区分这些树。 这些树在数据结构中何时以及何地使用?
---完美二叉树:
x
/ \
/ \
x x
/ \ / \
x x x x
/ \ / \ / \ / \
x x x x x x x x
完全二叉树:
x
/ \
/ \
x x
/ \ / \
x x x x
/ \ /
x x x
严格/完整树:
x
/ \
/ \
x x
/ \
x x
/ \
x x
满二叉树(有时也称作 proper 二叉树、2-树或严格二叉树)是一种每个非叶子节点都有两个孩子的二叉树。
因此,没有只有 1 个孩子的节点。看起来与严格二叉树相同。
下面是一个来自谷歌的满/严格二叉树示例图:
完全二叉树是一棵二叉树,其中除了可能是最后一层外,每个层上的节点数都达到了最大值,并且所有节点都尽可能靠左。
它似乎意味着一棵平衡树。
下面是一个来自谷歌的完全二叉树示例图,其中满树部分是额外的:
在STRICT BINARY TREE和FULL BINARY TREE之间存在差异。
1) FULL BINARY TREE: 高度为h的二叉树,恰好包含(2^h)-1个元素,称为完全二叉树。 (参考: Sartaj Sahni所著《数据结构、算法与C++应用》第二版,第427页)。
或者说
在完全二叉树中,每个节点恰好有0或2个孩子,并且所有叶子节点都在同一层上。
以下是完全二叉树的示例:
a.
18
/ \
15 30
/ \ / \
40 50 100 40
b.
18
/ \
15 30
2) 严格二叉树:每个节点恰好有0或2个子节点。
以下是严格二叉树的示例:
a.
18
/ \
15 30
/ \
40 50
. 18
/ \
15 30
/ \
40 50
/ \
20 45
我认为完全二叉树的定义没有什么混淆,但为了让文章更加完整,我想解释一下什么是完全二叉树。
3) 完全二叉树:如果所有层级都被填满,除了最后一层,且最后一层的所有键都尽可能地靠左,则称这棵二叉树为完全二叉树。
例如:以下是一棵完全二叉树:
18
/ \
15 30
/ \ / \
40 50 100 40
/ \ /
8 7 9
注意:以下是完全二叉树,也是按定义来说的满二叉树:
18
/ \
15 30
/ \ / \
40 50 100 40
结论 因此,一个完全二叉树也是一棵满二叉树。但反过来则不成立。
免责声明- 一些定义的主要来源是维基百科,欢迎提出改进建议。
虽然这篇文章有一个被接受的答案,而且很好,但我仍然感到困惑,想要添加更多的澄清,关于这些术语之间的区别。
(1)完全二叉树- 完全二叉树是一种二叉树,其中除了叶节点外的每个节点都有两个子节点。这也称为严格二叉树。
上面两个是完全或严格二叉树的例子。
(2) 完美二叉树- 现在,完美二叉树的定义相当模糊,它陈述:- 完美二叉树是一棵二叉树,在每个级别上,除了最后一个级别可能不完全填充外,所有节点尽可能靠左对齐。 它可以在最后一个级别 h 上最左边拥有1和2h个节点
注意斜体行中的行。
模糊之处在于斜体行中的“除了最后一个”,这意味着最后一级也可能完全填充,即这个例外并不总是成立。如果该例外不成立,则与我发布的第二个图像完全相同,也可以称为完美二叉树。因此,完美二叉树也是完全和严格的,但反之不然,这将通过我需要陈述的另一个定义变得更清楚:
几乎完全二叉树- 当完全二叉树的定义中的例外情况成立时,它被称为几乎完全二叉树或近似完全二叉树。它只是完全二叉树的一种类型,但需要一个单独的定义来使其更加明确。
因此,一个几乎完全的二叉树看起来像这样。你可以在图片中看到节点尽可能靠左,所以它更像是完全二叉树的子集,更加严谨地说,每个几乎完全的二叉树都是一个完全二叉树,但反之则不成立。
根据我的有限经验,我认为二叉树有以下几种类型:
完全二叉树是一种特殊的二叉树,而反过来则不一定成立。如果一个二叉树的深度为n,则完全二叉树的节点数为(2^n-1)。二叉树不一定每个节点都有两个子节点,但在完全二叉树中,每个节点要么没有子节点,要么有两个子节点。
首先,了解二叉树本身非常重要,才能理解不同类型的二叉树。
如果以下条件均满足,则该树是二叉树:
- 它有一个根节点,可能没有任何子节点(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具有更多的子节点,即最后一层(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
让我们考虑一棵高度为'h'的二叉树。如果所有叶子节点都出现在高度为'h'或'h-1'的位置上,并且序列中没有任何缺失数字,则称该二叉树为完全二叉树。
1
/ \
2 3
/ \
4 5
它是一棵完全二叉树。
1
/ \
2 3
/ /
4 6
由于序列中缺少数字为5的节点,它不是一棵完全二叉树。