平衡二叉树和完全二叉树有什么区别?
是否可以说每个完全二叉树都是平衡树?
反过来呢?
平衡二叉树是指每个节点的两个子树深度差不超过1的二叉树。
完全二叉树是指除了最后一层之外的所有层都被完全填满,并且最后一层上的所有叶子节点都靠左排列的二叉树。
以下是一个平衡二叉树,但不是完全二叉树。每个完全二叉树都是平衡二叉树,但反之不一定成立。
1
1 1
1 1 1
1
正如其名,在一棵完全二叉树中,层级差别总不会超过1,因此它总是平衡的。
由于进一步涉及到完美、平衡、完整和充分的问题 - 这里提供一个澄清这些问题的答案。假设有一个二叉树:
平衡:每个节点的左子树和右子树的高度差不超过1。
满:除了叶子节点外,所有节点都有0或2个子节点。
完全:
满且平衡 - 所有节点都有0或2个子节点, 第3层 - 第2层 ≤ 1
,(不完全 - 最后一层的节点没有尽可能向左)
1 --- LEVEL 0
/ \
1 1 --- LEVEL 1
/\ /\
1 1 1 1 --- LEVEL 2
- /\ - -
1 1 --- LEVEL 3
x x - -
完整、平衡和完全 - 所有节点都有0或2个子节点,3-2 <= 1
,最后一层的节点尽可能靠左:
1 --- LEVEL 0
/ \
1 1 --- LEVEL 1
/\ /\
1 1 1 1 --- LEVEL 2
/\ - - -
1 1 --- LEVEL 3
- -
完整的 - 所有节点都有0或2个孩子(不平衡的 - 3 - 1 > 1
, 不完整的 - 第1层有一个没有孩子的节点):
1 --- LEVEL 0
/ \
1 1 --- LEVEL 1
/ \ -
1 1 --- LEVEL 2
/ \ - x x
1 1 --- LEVEL 3
- -
完整平衡 - 最后一层节点尽可能靠左,3 - 3 <= 1
(非满树 - 存在一个拥有1个子节点的第二层节点):
1 --- LEVEL 0
/ \
1 1 --- LEVEL 1
/\ /\
1 1 1 1 --- LEVEL 2
/\ /\ /\ /x
1 1 1 11 1 1 --- LEVEL 3
- - - -- - -
平衡 - 3 - 3 <= 1
,(非满 - 存在一个具有1个子节点的第2级节点,不完全 - 最后一层的节点未尽可能地靠左)
1 --- LEVEL 0
/ \
1 1 --- LEVEL 1
/\ /\
1 1 1 1 --- LEVEL 2
/\ /\ /x /\
1 11 11 1 1 --- LEVEL 3
- -- -- x - -
以上示例都不是完美二叉树。
当一个高度为h的二叉树的所有叶子节点都在第h层,并且每个父节点恰好有两个子节点时,该树被称为满二叉树
当除了最后一层外的所有层都包含尽可能多的节点,并且最后一层上的节点从左到右填充时,该树被称为完全二叉树(不是满二叉树,但是完全)
当二叉树中每个节点都有两个子树,且这些子树的高度完全相同时,该树被称为完全平衡二叉树
完全平衡二叉树是满二叉树
如果一个节点的子树之间的差异不超过1,则该节点的子树被称为高度平衡或简称平衡