TreeMap源码分析二

本文详细介绍了红黑树结构及其算法实现,包括节点颜色、红黑树节点定义、相关操作如左旋、右旋、插入与删除等,并强调了插入与删除后的修正操作以确保红黑树性质的维持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.fengfly.com/plus/view-213898-3.html  

TreeMap中的红黑树结构及其算法实现 


节点颜色静态变量 红色

 
  1. private static final boolean RED = false
 
  1. private static final boolean BLACK = true;  

红黑树节点

 
  1. 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 


 相关操作

 左旋

 
  1. private void rotateLeft(Entry<K,V> p) { ... } 

 右旋

 
  1. private void rotateRight(Entry<K,V> p) { ... } 

插入操作

 
  1. public V put(K key, V value) { ... } 

 插入修正操作
红黑树执行插入操作之后,要执行“插入修正操作”。
目的是:保红黑树在进行插入节点之后,仍然是一颗红黑树

 
  1. private void fixAfterInsertion(Entry<K,V> x) { ... }  

删除操作

 
  1. private void deleteEntry(Entry<K,V> p) { ... } 

删除修正操作

红黑树执行删除之后,要执行“删除修正操作”。
目的是保证:红黑树删除节点之后,仍然是一颗红黑树

private void fixAfterDeletion(Entry<K,V> x) { ... }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值