转自:http://www.fengfly.com/plus/view-213898-3.html
TreeMap中的红黑树结构及其算法实现
节点颜色静态变量 红色
- private static final boolean RED = false;
- private static final boolean BLACK = true;
红黑树节点
- static final class Entry<K,V> implements Map.Entry<K,V> { ... }
Entry包含了6个部分内容:key(键)、value(值)、left(左孩子)、right(右孩子)、parent(父节点)、color(颜色)
Entry节点根据key进行排序,Entry节点包含的内容为value。
如果想研究下红黑树算法的具体实现,以下代码可以好好的研究下,
对红黑树的算法讲解,JULY分析的很好,强烈推荐大家看下:http://my.youkuaiyun.com/v_july_v
相关操作
左旋
- private void rotateLeft(Entry<K,V> p) { ... }
右旋
- private void rotateRight(Entry<K,V> p) { ... }
插入操作
- public V put(K key, V value) { ... }
插入修正操作
红黑树执行插入操作之后,要执行“插入修正操作”。
目的是:保红黑树在进行插入节点之后,仍然是一颗红黑树
- private void fixAfterInsertion(Entry<K,V> x) { ... }
删除操作
- private void deleteEntry(Entry<K,V> p) { ... }
删除修正操作
红黑树执行删除之后,要执行“删除修正操作”。
目的是保证:红黑树删除节点之后,仍然是一颗红黑树
private void fixAfterDeletion(Entry<K,V> x) { ... }