前面我们说到的二叉查找树,可以看到根结点是初始化之后就是固定了的,后续插入的数如果都比它大,或者都比它小,那么这个时候它就退化成了链表了,查询的时间复杂度就变成了O(n),而不是理想中O(logn),就像这个样子 如果我们有一个平衡机制,让这棵树可以动起来,比如将4变成根结点,是不是查询效率又可以提高了,这就要提到另外一种特殊的二叉树---红黑树(也是一种特殊的二叉查找树).JDK1.8中将HashMap底层实现的数据结构由数组+链表变成了数组+链表+红黑树.当链表长度超过8就转换成红黑树,明显…
代码实现 代码参考了<数据结构(c++语言版)>--清华大学邓俊辉 "RBTree.h" #pragma once //#include"pch.h" #include<iostream> //宏定义 #define IsRoot(x) ( !((x)->pa) ) #define IsLChild(x) ( !(IsRoot(x) ) && (x)==(x)->pa->lc) #define IsRChil…
目录 红黑树的定义 节点与树的定义 旋转操作 插入操作 情况1:p的兄弟u为黑色 情况2: p的兄弟u为红色 插入操作性能分析 代码实现 删除操作 情况1:x的接替者succ为红色 情况2:x的接替者succ为黑色 情况2.1:x的父亲p为黑色,x的兄弟s为黑色,但是s有红色孩子 情况2.2:x的父亲p为黑色,x的兄弟s为黑色,且s没有红色孩子 情况2.3:x的父亲p为黑色,x的兄弟s为红色 情况2.4:x的父亲p为红色,此时x的兄弟s必定为黑色 删除操作性能分析 代码实现 完整代码及测试实例…
1.. 图解2-3树维持绝对平衡的原理: 2.. 红黑树与2-3树是等价的 3.. 红黑树的特点 简要概括如下: 所有节点非黑即红:根节点为黑:NULL节点为黑:红节点孩子为黑:黑平衡 4.. 实现红黑树的业务逻辑 import java.util.ArrayList; public class RBTree<K extends Comparable<K>, V> { private static final boolean RED = true; private static f…
红黑树介绍 1.节点是红色或黑色. 2.根节点是黑色. 3.每个叶子节点都是黑色的空节点(NIL节点). 4 每个红色节点的两个子节点都是黑色.(从每个叶子到根的所有路径上不能有两个连续的红色节点) 5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点 JDK1.8 HashMap$TreeNode.balanceInsertion 红黑树平衡插入…
AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树.查找.插入和删除在平均和最坏情况下都是O(log n).增加和删除可能需要通过一次或多次树旋转来重新平衡这个树.AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis,他们在1962年的论文<An algorithm for the organization of information>中发表了它. 节点的平衡因子是它的左子树的高度减去它的右子树的…
package practice; public class TestMain { public static void main(String[] args) { int[] ao = {5, 1, 18, 3, 8, 20, 13, 16, 12}; Integer[] a = new Integer[9]; for (int i = 0; i < a.length; i++) { a[i] = new Integer(ao[i]); } RedBlackBST<Integer,Strin…
红黑树介绍红黑树(Red-Black Tree),它一种特殊的二叉查找树.执行查找.插入.删除等操作的时间复杂度为O(logn). 红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值.红黑树的每个节点上都有存储位表示节点的颜色,颜色是红(Red)或黑(Black).红黑树的特性: 每个节点或者是黑色,或者是红色. 根节点是黑色. 每个叶子节点是黑色. (注意:这里叶子节点,是指为空的叶子节点) 如果一个节点是红色的,则它的…
红黑树相比平衡二叉树(AVL)是一种弱平衡树,且具有以下特性: 1.每个节点非红即黑; 2.根节点是黑的; 3.每个叶节点(叶节点即树尾端NULL指针或NULL节点)都是黑的; 4.如图所示,如果一个节点是红的,那么它的两儿子都是黑的; 5.对于任意节点而言,其到叶子点树NULL指针的每条路径都包含相同数目的黑节点; 6.每条路径都包含相同的黑节点…
procedure TDR_QM_ZP_Form.btn_ZXClick(Sender: TObject); //图像左旋 begin screen.Cursor := crhourglass; my_int3 := my_int3 + ; FL_bmp_rotate( Original_Bmp1 , Image1.Picture.Bitmap, my_int3); screen.Cursor := crdefault; //把鼠标指针恢复成缺省状态. end; my_int3 := my_in…