摘要:
红黑树的定义和插入在红黑树的实现(一)中已经描述和实现了,下面说一下红黑树的删除。 红黑树的删除也包括两个步骤: 1.删除结点 2.调整树满足红黑树的定义 首先是删除一个结点,同样可以按二叉排序树的删除结点来删除。删除结点又分为4中情况: (1)删除结点没有左孩子,有右孩子 (2)删除结点没有右孩子,有左孩子 (3)删除结点为叶子结点 (4)删除结点既有左孩子又有右孩子 对于情况(1),可以直接用右孩子代替删除的结点,并且由于删除结点有右孩子,所以删除结点必定为黑色,右孩子必定为红色(假设删除结点为红色,右孩子必定为黑色,这样是违反红黑树定义4的,所以删除结点必定为黑色,... 阅读全文
摘要:
由于看个东西,发现要用到红黑树,所以拿算法导论看了下红黑树的定义和实现,第一遍看发现红黑树挺复杂的,第二遍再看发现好了点,第三遍又好点。。。n遍之后终于有点理解了。最后打算自己实现这个红黑树,也能更好的理解它。1 红黑色定义 首先红黑树的定义是非常重要的,它的定义如下: 1.一个结点要么是黑色,要么是红色,只能是其中的一种。 2.树的根结点一定是黑色。 3.如果一个结点为红色,那么它的孩子结点必定为黑色。 4.从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。 正是有了这个定义,使得红黑树保持了良好的性质,如树的高度不会超过2lgn,所以对某个关键字的查找时间为o(... 阅读全文