二叉树(binary tree)
性质: 每个节点都不能有多于两个的儿子。
形式:
二叉查找树(ADT)
性质: 对于树中每个节点X,其左子树中所有项的值均小于X项中的值,且其右子树中所有项的值均大于X中的值。
形式:
B)中根节点6的左子树中存在比其大的节点7,因此不是二叉查找树。
AVL树(带有平衡条件的二叉查找树)
性质: 属于二叉查找树,但增加了平衡条件:对于树中每个节点,其左子树和右子树的高度最多差1。
形式:
A)中根节点6的左子树高度为3,右子树高度为1,不符合AVL树高度差的要求,因此不是AVL树。
伸展树
性质: 保证从空树开始任意连续M次对树的操作最多花费O(MlogN)时间,但并不排除任意单次操作花费O(N)时间的可能。其基本想法是,当一个节点被访问后,它就要经过一系列AVL树旋转向根推进。如果一个节点很深,则在其路径上的许多节点也相对较深,通过重新构造可使得所有这些节点进一步访问所花费的时间变少。
B树
性质:
阶为M的B树是一棵具有下列特性的M叉树:
- 数据项存储在树叶上;
- 非叶节点存储直到M-1个关键字以指示搜索的方向:关键字i代表子树i+1中的最小的关键字;
- 树的根或者是一片树叶,或者其儿子数在2和M之间;
- 除根外,所有非叶节点的儿子数在⌈M/2⌉和M之间;
- 所有的树叶都在相同的深度上,并且每片树叶拥有的数据项其个数在⌈L/2⌉和L之间。
形式:
图中只有叶子节点是最终存储了数据,所有非叶子节点都是索引,指示搜索方向。
红黑树
性质:
- 每个节点要么是黑色,要么是红色;
- 根节点是黑色;
- 每个叶子节点(NULL)是黑色;
- 红色节点的子节点一定是黑色;
- 任意一节点到每个叶子节点的路径都包含数量相同的黑节点。
形式:
红黑树并不是一个完美平衡二叉查找树,从图中可以看出,根结点的左子树显然比右子树高,但左子树和右子树的黑结点的层数是相等的,也即任意一个结点到到每个叶子结点的路径都包含数量相同的黑结点(性质5)。所以我们叫红黑树这种平衡为黑色完美平衡。