看了这么多篇红黑树文章,你理解了嘛?
这种情况下最简单,也就是删除的是根节点或者是叶子节点(这里的叶子节点都是指非NULL的叶子节点),根节点直接删除即可。如果叶子节点是红色的,也可以直接删除,如果叶子节点是黑色的,那么就需要进行调整,调整的步骤和插入时调整的步骤一样。 (2)第二种情况:要删除的节点有一个子节点 这时候。把子节点的值替换掉要删除的节点的值。 ![]() 现在我们的5把11替换掉之后,又回到了第一种情况。如果节点5是红色的,可以直接删除,如果节点5是黑色的,那么就需要进行调整,此时的节点5就是叶子节点。调整的步骤和插入时调整的步骤一样。 (3)第三种情况:要删除的节点有两个子节点 现在删除的节点有两个子节点,同样的我们可以执行第二种情况的操作, ![]() 若节点13之前是叶子节点,那就和第一种情况一样了,如果节点13是红色的,可以直接删除,如果节点13是黑色的,那么就需要进行调整,此时的节点13就是叶子节点。调整的步骤和插入时调整的步骤一样。 若节点13之前还有子节点,那就和第二种情况一样了。那就继续替换和判断。 以上呢就是删除的情况,最后一种情况是修改,这种情况是查找和插入的结合体,也就是先找到要修改的元素,修改完值之后,继续进行调整即可。 现在还有最后一个问题了,都说红黑树很重要,为什么重要呢?我们来看一下使用场景。 四、使用场景红黑树的应用真的是太多了,比如说java中的HashMap和TreeMap。还有就是linux也经常使用到。这种数据结构在面试的时候是一个常问问题,希望大家能够明白和理解。如何用java手撕红黑树,在后续文章中我会添加。如有问题还请批评指正。
(编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |