Red-Black Tree 的Java实现
Every node is either red or black. The root is black. Every leaf (NIL) is black. If a node is red, then both its children are black. For each node, all paths from the node to descendant leaves contain the same number of black nodes. 上面是算法导论对红黑树性质的描述,这两天趁着不那么忙又比较无聊研究了一下,顺便用Java实现并简单进行了测试。算法不再赘述,只说说自己理解。 红黑树的核心在于进行普通BST的插入删除操作后对树结构的调整以维持红黑树的特性。 在插入操作中,设定新插入的节点为红色,这是为了不改变该节点所在路径的Black Height。但是新节点可能会与它的父节点同为红色,这会与性质4冲突(原树为空导致性质2不满足的情况比较简单,略过不提)。插入后的调整操作就是要在保持其他性质的前提下消除与性质4的冲突。由于新插入的节点x与x.p都是红色,则x.p.p一定为黑色,此时根据x.p.p的另一个孩子(x的uncle)的颜色分了两种情况:第一种即为case 1;第二种有根据x是x.p的左节点还是右节点分为case 2和case 3