关于学习红黑树的一些小收获与总结

来源:互联网 发布:linux root 查看密码 编辑:程序博客网 时间:2024/05/17 06:05

先上代码:https://github.com/yefengdanqing/Datastruct

本人通过算法导论对红黑树进行认识并根据书中的伪代码实现一个红黑树类。

首先红黑树是一个相对平衡的二叉树;比到正真的平衡二叉树,他节省了用来维护平衡的开销;在二叉搜索树的基础上通过5条性质来约束,通过这样约束的树就是二叉搜索树。

第一:根节点是黑色;第二所有的叶子结点(其实只有一个节点,该节点理解为哨兵)是黑色;第三,如果一个节点是红色,那么他的孩子节点(们)必为黑色;第四,一个节点只有一种颜色,要么黑丝,要么红色;第五,从一个节点出发的路径到叶子节点(哨兵)的黑节点的数目相同,即黑高相同;对于红黑树的插入与删除也是违背了这几条性质,并围绕这些性质进行修复。

插入:

首先:对于插入红色节点比插入黑色节点违背的性质要少,因此,插入黑色节点;其次插入操作是处理红红节点问题;为了能满足整个树是红黑树,大体思路是将该节点进行上移,直到根节点,最后将跟节点涂黑也不影响整个树;但是在上移的过程中我们能通过旋转与改变颜色尽快的调整为合法的红黑树;这样更高效。

删除:

首先:删除操作再删除红节点的时候,对整个树没有影响,不予考虑整个结果;其次,对删除操作我们是将删除点转移到(或者本身就是)其直接后继节点进行处理,这样更试用所有的情况;第三,删除操作是处理黑黑问题,即删除点是黑色,删除后必然会违反红黑树的性质。(先写到这儿,待补充)

原创粉丝点击