预备知识
- 对于大量的输入数据,链表的线性访问时间太慢。而树的大部分操作的运行时间平均为O(logN)
- 平衡二叉查找树是两种类库集合类TreeSet和TreeMap实现的基础
树的遍历
- 先序遍历 : 对节点的处理工作是在它的诸儿子节点被处理之前进行的
- 后序遍历 : 一个节点处的工作是在它的诸儿子节点被计算后进行的
- 中序遍历 : 左,节点,右
二叉查找树
- 二叉树的定义 : 其中每个节点都不能多于两个的儿子
- 二叉查找树定义 : 对于树中的每个节点X, 它的左子树中所有项的值小于X中的项,而它的右子树所有项的值大于X中的项。
- 时间复杂度 : 树的所有节点的平均深度为O(logN),因此所有操作的运行时间都是O(logN),但是有可能会出现极端的情况
AVL树
- 定义 : Adelson-Velskii 和 Landis树是带有平衡条件的二叉查找树,每个左子树和右子树的高度最多差1的二叉查找树s
- 维持平衡操作 : 单旋和双旋
- 时间复杂度 : O(logN),N为树的深度
红黑树
- 定义 : red black tree AVL树的变种
1. 每一个节点或者着成红色、或者着成黑色。
2. 根是黑色的
3. 如果一个节点是红色的,那么它的子节点必须是黑色的。
4. 从一个节点到一个null引用的每一条路径必须包含相同数目的黑色节点- 时间复杂度 : 最坏情形下花费O(logN)时间
- 总结 : 红黑树的高度最多是2log(N+1)
伸展树
- 基本思想 : (splay tree) 当一个节点被访问后,它就要经过一系列AVL树的旋转被推到根上。(在许多应用中当一个节点被访问时,它很可能不久再被访问)。
- 时间复杂度 : 它保证从空树开始连续M次对树的操作最多花费O(MlogN)时间
B树
- 定义 : M叉查找树
- 特性 :
1. 数据项存储再树叶上
2. 非叶节点存储直到M-1个关键字以指示搜索的方向;关键字i代表子树i+1中的最小的关键字
3. 树的根或者是一片树叶,或者其儿子数在2和M之间
4. 除根外,所有非树叶节点的儿子数在(M/2向上取整)和M之间
5. 所有的树叶都在相同的深度上并有L/2向上取整和L之间个数据项