红黑树的删除共有12种情况, 设要删除的节点为Z: 1.Z为根 且没有孩子 直接删除,将根赋空 2.Z为根 有一个红孩子(由于第4条性质一定为红孩子) 将孩子颜色->黑,当做新的根,删除节点 3.Z红色 直接删除,判断Z为父亲的左孩子或右孩子 将其赋空 (此节点一定没有孩子,因为2个孩子的已经处理过 ...
分类:
其他好文 时间:
2018-05-20 15:25:23
阅读次数:
152
红黑树: 适用于插入、删除、搜索操作。 源自2-3树,属于平衡二叉树,插入、删除后最多经过三次旋转、颜色转换达到平衡。 减少搜索层级。兼具AVL树平衡优点,保持花费太多代价更小。 基本结构: TreeNode<K,V> parent; // red-black tree links TreeNode ...
分类:
其他好文 时间:
2018-05-19 14:45:08
阅读次数:
146
红黑树是一个平衡的二叉树,但不是一个完美的平衡二叉树。 红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高。 在C++ STL中,很多部分(包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化, ...
分类:
其他好文 时间:
2018-05-19 13:59:03
阅读次数:
181
1、AVL 1.基本概念 AVL是平衡二叉查找树,它或者是一颗空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。 若将二叉树结点上的平衡因子BF(Balance Factor)定义为该结点的左子树的深度减去它的右子树的深度,则平衡二叉树上 ...
分类:
其他好文 时间:
2018-05-14 22:04:36
阅读次数:
180
因为TreeMap的相关知识较多,故TreeMap的分析将会分成三篇文章来写,望大家谅解。 本篇文章先给大家介绍一下红黑树基本概念,并分析一下在红黑树中查找某个结点的相关源码实现。 TreeMap是啥 从TreeMap的类名上就能知道它的底层存储结构其实是红黑树。首先简单介绍一下红黑树的相关知识,以 ...
分类:
其他好文 时间:
2018-05-13 16:52:37
阅读次数:
159
红黑树的删除操作,较之插入更为复杂,因为红黑树也是二叉搜索树,所以红黑树的删除流程跟二叉搜索树一样,先找到要删除的目标节点T,如果T没有子节点,则将T直接删除,如果T有一个子节点,则将此子节点替换到T的位置,然后删除T,否则如果有两个子节点,则在T的子树中寻找后继节点X,然后将X的值覆盖到T结点,然 ...
分类:
其他好文 时间:
2018-05-12 22:37:28
阅读次数:
179
算法原理请参考《算法导论》 代码实现,只贴出和红黑树不同的类成员函数实现,其余都是和红黑树一样。 类声明 和红黑树不同的类成员函数实现 avl_insert成员函数 avl_delete成员函数 avl_fixup成员函数,修复节点 avl_max_depth成员函数,最大深度 avl_min_de ...
分类:
其他好文 时间:
2018-05-12 16:46:06
阅读次数:
185
二叉查找树(BST)具备什么特性呢? 红黑树具备什么特性呢? 保证了从根到叶的最长路径不会超过最短路径的2倍。 如何让树保持红黑色特性:1)变色 2)旋转 红黑树的应用:TreeMap,TreeSet,Java8 ...
分类:
其他好文 时间:
2018-05-11 15:34:58
阅读次数:
136
基于Java1.7的 HashMap原理 1.基于哈希原理,存储key-value键值对(Entry)的集合。在JDK1.8以前数据结构是一个数组+链表,在JDK1.8以后是一个数组+链表+红黑树。(key,value,hash,next) 2.put方法原理:1)通过哈希函数计算key,得到哈希值 ...
分类:
其他好文 时间:
2018-05-11 14:34:40
阅读次数:
153
R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。 红黑树的特性: (1)每个节点或者是黑色,或者是红色。 (2)根节点是黑色。 (3)每个叶子节点(NIL)是黑色。 [注 ...
分类:
其他好文 时间:
2018-05-10 11:20:27
阅读次数:
150