前情提要
之前只写了一些AVL树核心算法,这里给出一个AVL树的完整实现。
AVL树是平衡查找二叉树,不仅能避免二叉搜索树出现斜树的状况,更是能保持比较标准的O(log2N),但AVL树可能需要很多次的各种调整:
- 左儿子单旋转
- 左儿子双旋转
- 右儿子单旋转
- 右儿子双旋转
最终使得AVL树维持平衡,保持较高查找效率。 调整在插入删除每一次的不平衡后进行,可能简单也可能复杂,但基本的四种“动作”是固定的。
AVL树作为数据结构,说简单也简单,说复杂也复杂。对初学者来说,一定要掌握的是检测和调整AVL树平衡(含四种旋转)的代码,随着学习的深入,应该尝试编写AVL树的完整代码。
这里就给大家提供一份可用的完整代码。
功能介绍- void insert(x) → Insert x
- void remove(x) → Remove x (unimplemented)
- boolean contains(x) → Return true if x is present
- boolean remove(x) → Return true if x was present
- Comparable findMin() → Return smallest item
- Comparable findMax() → Return largest item
- boolean isEmpty() → Return true if empty; el