原文地址:Binary Tree | Set 3 (Types of Binary Tree)
前面我们已经介绍了二叉树以及二叉树的特性。在这一篇中我们讨论二叉树的常见类型。
下面就是二叉树的常见类型。
满二叉树:如果一个二叉树的所有节点要么有2个孩子,要么没有孩子,那么这个二叉树就是满的。下面就是一个满二叉树的例子:
18
/ \
15 30
/ \ / \
40 50 100 40
18
/ \
15 20
/ \
40 50
/ \
30 50
18
/ \
40 30
/ \
100 40
在一个满二叉树中,叶子节点的数目等于内部节点数目加1。
L=I+1
在这里L是叶子节点的数目,I是内部节点的数目。
证明请看Handshaking Lemma and Interesting Tree Properties。
完全二叉树:如果除了在最后一层,最后一层左边有所有的keys外,其他所有的叶子节点都存在,那么这个二叉树就是完全二叉树。
下面是完全二叉树的例子:
18
/ \
15 30
/ \ / \
40 50 100 40
18
/ \
15 30
/ \ / \
40 50 100 40
/ \ /
8 7 9
完全二叉树一个实际的例子是二叉堆。
完整二叉树:一个二叉树所有的内部节点都有两个孩子并且所有的叶子节点都在同一层,那么这个二叉树就是完整二叉树。
下面是一个完成二叉树的例子:
18
/ \
15 30
/ \ / \
40 50 100 40
18
/ \
15 30
一个高度为
h
(高度是根到叶子节点路径上节点的数目)的完整二叉树有
家族遗传就是完整二叉树的一个例子。让一个人在根节点上,父母作为根节点的孩子,父亲的父亲作为孩子。
平衡二叉树:如果树的高度是O( LogN ),这里的N是节点的数目,那么这个二叉树是平衡的。例如,AVL树通过确保左右子树的高度差为1来保持O( LogN )的高度。红黑树通过确保每个根节点到叶子节点路径上的黑色节点数目是相同的,并且没有相邻的红色节点来保持O( LogN )的高度。平衡二叉查询树的性能是相当不错的,它的查询,插入和删除的时间复杂度是O( Logn )。
退化(或者病态)树:一个树的所有内部节点只有一个孩子。这种树的性能跟链表差不多。
10
/
20
\
30
\
40
来源:
https://en.wikipedia.org/wiki/Binary_tree#Types_of_binary_trees