java-TreeMap
问题来源
TreeMap的实现是红黑树算法的实现
1.先了解红黑树
a.红黑树是一颗自平衡的排序二叉树。
b.节点为红色或黑色的平衡二叉树
c.具体规则
d.红黑树的三大操作:左旋,右旋,着色
2.TreeMap数据结构
TreeMap的一个重要属性
比较器
a.如题,构造一个比较器new TreeMap<>();则使用默认的比较器
b.也可new TreeMap<>(Comparator<? super K> comparator);则使用自带的比较器
3.TreeMap put()方法
要求: 插入的新节点总为红色节点
a 若新插入的节点N没有父节点,则直接当做根节点插入即可,同时将颜色设置为黑色
b 若新插入的父节点为黑色,直接插入,同时颜色为红色
b 若新插入的父节点的颜色为红色,破坏了性质,故插入算法就是通过重新着色或旋转,来维持性质
4.TreeMap delete () 方法
1、没有儿子,即为叶结点。直接把父结点的对应儿子指针设为NULL,删除儿子结点就OK了。
2、只有一个儿子。那么把父结点的相应儿子指针指向儿子的独生子,删除儿子结点也OK了
3、有两个儿子。上面提到过用子节点C替代代替待删除节点D,然后删除子节点C即可。