经过几天的奋斗红黑树算法总算是大体完成了。这里写一点红黑树算法的心得,供大家参考也方便自己以后查阅。当然更希望得到大家的指正,看到自己的不足之处,及时作出修改。
一、添加算法:
新添加的节点为红色,所以不破坏每个支路的黑色节点个数,调整只需要通过旋转等操作使子树的颜色符合规则并将红色节点向上过滤到根,根置为黑色结束。
实际编程情况:
1、父节点为黑色,结束
2、父节点为红色,叔叔节点为红色,则将爷爷节点置为红色,父节点和叔叔节点为黑色,向上过滤。
3、父节点为红色,叔叔节点为黑色,则通过旋转操作使当前节点、父节点、爷爷节点形成新的根和根的两个孩子,使新的根为红色,根的两个孩子为黑色,向上过滤。
二、删除算法:
父子树是指欲删除节点的父节点为根的子树;或是以左右子树深度不同的节点为根的子树。
1、红黑树删除调整整体目的是将父子树的左右子树深度调整到一致,若调整后父子树深度比未删除前小1则向上过滤直到根节点处;否则可以直接结束。
因此理论上或者可以将父子树的一个红色节点变成黑色并旋转调整,或者可以将父子树的一个黑色节点变成红色并向上过滤。
实际编程时分为以下几种情况:
以子树的深度指代子树,设父子树的孩子分别为N-1,N,其中N-1指深度较小的节点。
1、N-1为红色,则将N-1涂成黑色结束。
2、N-1为黑色,N为红色,父节点为黑色,则旋转使N为新的父节点,并将N涂成黑色,原父节点涂成红色,此时转化为情况3。
3、N-1为黑色,N为黑色,父节点任意,若N的孩子中有红色,则通过旋转操作使N、父节点、N的红色孩子构成新的根和根的两个孩子,新的根颜色和原来的根相同,新根的两个孩子颜色为黑色,结束。
4、N-1为黑色,N为黑色,N的孩子均为黑色,此时若父节点为红色,则旋转使N为新的根,结束;若父节点为黑色,则N涂成红色并向上过滤。
参考博客:https://www.cnblogs.com/skywang12345/p/3245399.html
关于红黑树算法的一点心得
最新推荐文章于 2022-05-10 15:58:38 发布