随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

基本结构:

> 每个节点或者是黑色,或者是红色;
> 根节点必须是黑色; > 每个叶子节点是黑色﹔   Java实现的红黑树将使用null 来代表空节点,因此遍历红黑树时将看不到黑色的叶子节点,反而看到每个叶子节点都是红色的; > 如果一个节点是红色的,则它的子节点必须是黑色的:(红节点不能连接红节点,但是黑节点可以连接黑节点)   从每个根到节点的路径上不会有两个连续的红色节点,但黑色节点是可以连续的。若给定黑色节点的个数N,最短路径情况是连续的N个黑色,树的高度为N-1;最长路径的情况为节点红黑相间,树的高度为2(N-1);
> 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点数量:   成为红黑树最主要的条件,后序的插入、删除操作都是为了遵守这个规定;

红黑树是方便进行左旋或右旋操作:

  左旋或右旋操作可以将特殊的结构转换为平衡二叉树结构。

所有新增的节点都是红色节点。

 

 

数据插入处理
> 第一次插入,由于原树为空,所以只会违反红-黑树的规则2(根节点为黑色),所以只要把根节点涂黑即可;
> 如果插入节点的父节点是黑色的,那不会违背红-黑树的规则,什么也不需要做;
> 但是遇到如下三种情况时,就要开始变色和旋转了∶   
> 插入节点的父节点和其叔叔节点(祖父节点的另一个节点)均为红色的;   > 插入节点的父节点是红色,叔叔节点是黑色,且插入节点是其父节点的左子节点;

  > 插入节点的父节点是红色,叔叔节点是黑色,且插入节点是其父节点的右子节点;

 

 

 

 

 

 

较为复杂,需要长时间的理解。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2022-02-11 15:15  时间完全不够用啊  阅读(106)  评论(0编辑  收藏  举报