赞
踩
这篇说下红黑树
其实,红黑树,对于我来说,比较重要的几点。
这些是很重要的。
红黑树需要满足什么条件呢?
应该有四个,如下:
这个,除了上边四个条件;还要有2个操作,左旋和右旋。
有了这些条件,再加上左旋右旋操作,接下来看看红黑树的插入,删除。
删除调整:
双重黑节点的兄弟节点是黑色,兄弟节点下面的两个子节点也是黑色,父节点增加一重黑色,双重黑与兄弟节点,分别减少一重黑色。
兄弟节点是黑色,并且,兄弟节点中有红色子节点
兄弟节点是红色,通过旋转,转变成兄弟节点是黑色的情况
树的遍历,都有前序,中序,后序三个操作。对于红黑树,插入,删除都是O(1)的时间复杂度。来看看代码。
关于代码,网上版本比较多,不提供参考意见。可以看下ngx_rbtree.c,ngx_rbtree.h的实现。
红黑树是一个比较复杂的数据结构。不过,还是要学习下的,可以参考下动画动画链接,这个里边有模拟插入删除的整个调整过程。有些时候看文字确实比较模糊,不容易学会儿。代码还是要看下的,可以配合一些动画。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。