困惑了很久的红黑树========来个了断吧

本文主要是为了描述旋转的原则,所以,至于红黑树的数据结构,红黑树的基本准则,不在强调,,红黑树困惑的就是这旋转的过程.!!!

画红黑树很简单的画图工具:  https://sourceforge.net/projects/dia-installer/?source=typ_redirect11

参靠博客: http://www.cnblogs.com/skywang12345/p/3245399.html

https://www.cnblogs.com/xrq730/p/6867924.html

三大原则:前提是红黑树的五个性质(根是黑的,空节点是黑的,红色节点不连续)

1.当前节点的父节点是红色,且叔叔节点也是红色

将父节点设为黑色

将叔叔设置成 黑色,

祖父节点变红,

将祖父节点设为"新的当前节点 ”(红色节点),进行操作

2.父节点是红,叔叔是黑,且当前节点是父节点的右孩子

将父节点作为"新的当前节点 ”,

以"新的当前节点 ”为支点进行左旋

3.父节点是红,叔叔是黑,且当前节点是父节点的左孩子

将父节点设为"黑色",

将祖父节点设为红色,

以"祖父节点进行"右旋

比如

这是第三点,右旋

左旋加右旋

左旋,后右旋

对应的java  代码

if (parentOf(x) == leftOf(parentOf(parentOf(x)))) {//1.当前节点的父节点 是 祖父节的左节点

    Entry<K,V> y = rightOf(parentOf(parentOf(x)));//叔叔(右)节点
if (colorOf(y) == RED) {//叔叔(右)节点是红色?
// 1.1父节点是红色,叔叔节点也是红色,设置父节点和叔叔节点都为黑色
setColor(parentOf(x), BLACK);//设置父节点为黑色
setColor(y, BLACK);//
setColor(parentOf(parentOf(x)), RED);
x = parentOf(parentOf(x));
} else {//叔叔(右)节点是黑色
// 1.2父节点是红色,叔叔节点是黑色
if (x == rightOf(parentOf(x))) {
//2.1 当前节点是右节点,则当前节点父节点左转
x = parentOf(x);//
rotateLeft(x);//左旋
}
setColor(parentOf(x), BLACK);//父节点变黑
setColor(parentOf(parentOf(x)), RED);//祖父节点变红
rotateRight(parentOf(parentOf(x)));
}
}

增加告一段落,,

删除真是过于复杂,遍历的时候采用的是中序遍历,找到最小的,然后左->父->右

treeMap 基于JDK 1.8的学习的更多相关文章

  1. fast-framework – 基于 JDK 8 实现的 Java Web MVC 框架

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! fast-framework 轻量级 Java Web 框架 – https://github. ...

  2. 大数据下基于Tensorflow框架的深度学习示例教程

    近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较 ...

  3. Spring AOP源码分析(三):基于JDK动态代理和CGLIB创建代理对象的实现原理

    AOP代理对象的创建 AOP相关的代理对象的创建主要在applyBeanPostProcessorsBeforeInstantiation方法实现: protected Object applyBea ...

  4. 基于JDK的动态代理原理分析

    基于JDK的动态代理原理分析 这篇文章解决三个问题: What 动态代理是什么 How 动态代理怎么用 Why 动态代理的原理 动态代理是什么? 动态代理是代理模式的一种具体实现,是指在程序运行期间, ...

  5. 代码片段:基于 JDK 8 time包的时间工具类 TimeUtil

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “知识的工作者必须成为自己时间的首席执行官.” 前言 这次泥瓦匠带来的是一个好玩的基于 JDK ...

  6. JAVA WEBSERVICE服务端&客户端的配置及调用(基于JDK)

    前言:我之前是从事C#开发的,因公司项目目前转战JAVA&ANDROID开发,由于对JAVA的各种不了解,遇到的也是重重困难.目前在做WEBSERVICE提供数据支持,看了网上相关大片的资料也 ...

  7. 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。

    基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别. 我还是喜欢基于Schema风格的Spring事务管理,但也有很多人在用基于@Tras ...

  8. spring中基于JDK和CGLIB代理在项目的应用

    一.环境与问题 环境 spring boot的版本是1.2.1.RELEASE.JDK版本是1.7 问题 ​ A服务 PeopleService 调用B服务 HelloService ,其中B服务的方 ...

  9. Spring -- <tx:annotation-driven>注解基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)的区别。

    借鉴:http://jinnianshilongnian.iteye.com/blog/1508018 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional ...

随机推荐

  1. Java泛型深入理解(转载)

    原文地址  http://blog.csdn.net/sunxianghuang/article/details/51982979 泛型之前 在面向对象编程语言中,多态算是一种泛化机制.例如,你可以将 ...

  2. Vue.js系列之项目结构说明

    转:https://www.jb51.net/article/111658.htm 前言 在上一篇项目搭建文章中,我们已经下载安装了node环境以及vue-cli,并且已经成功构建了一个vue-cli ...

  3. [UE4]背景模糊

    被遮挡的都会被模糊,没被遮挡的不会模糊

  4. arcgis for android 读取shp文件中文乱码解决方法

    设置注册表默认字符,即可解决中文乱码问题. 'dbfDefault' 设置方法1.开始--运行,输入”Regedit“,打开注册表.2.如是用的是 10.x 版本 ArcGIS Desktop,定位到 ...

  5. python读写json+字典保存

    解决方案 json 模块提供了一种很简单的方式来编码和解码JSON数据. 其中两个主要的函数是 json.dumps()和 json.loads() , 要比其他序列化函数库如pickle的接口少得多 ...

  6. 通过表达式树把datareader和datatable转换为实体

    续上两篇文章,使用emit构造dynamic method,把 datareader转换为实体,以避免直接使用反射来实现带来的性能损失.代码看似没有纰漏,但是实际上我在framwork4下运行时,调用 ...

  7. CM+CDH大数据平台

    我这里搭建的是3节点,centos6.5的静态ip ,ssh免密码登录,防火墙关闭,时钟同步等等一些准备工作我这里就不多说了 我们可以进官网看看 https://www.cloudera.com/ 我 ...

  8. linux设置服务器时间同步

    yum install -y rdate 服务器请设置 */5 * * * * /usr/bin/rdate -s time-b.nist.gov ubuntu 设定时区:dpkg-reconfigu ...

  9. es6(10)--Set,Map(1)

    //Set { let list=new Set(); list.add(5);//添加 list.add(7); //属性size就是长度 console.log('size',list.size) ...

  10. CentOS 7安装Oracle 12c

    1.root身份安装依赖包: yum -y install binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33*.i686 ...