紅黑樹刪除規(guī)則:
1:如果刪除節(jié)點是葉子節(jié)點
(1)如果刪除節(jié)點是紅色的啤握,那就直接刪除晶框,不做其它操作
(2)如果刪除節(jié)點是黑色的,那么就創(chuàng)建一個空節(jié)點來頂替刪除節(jié)點蹲蒲,然后按照后面的調整步驟進行調整
2:如果刪除節(jié)點有一個子節(jié)點侵贵,把后來頂替被刪節(jié)點的那個節(jié)點成為頂替節(jié)點,如果刪除節(jié)點為黑卡睦,而且頂替節(jié)點也為黑,那么把頂替節(jié)點當作當前節(jié)點表锻,然后按照后面的調整步驟進行調整。
3:如果刪除節(jié)點有兩個子節(jié)點显歧,那么确镊,找到其中序后繼節(jié)點,把這兩個節(jié)點的數據交換一下蕾域,不要復制顏色,也不改變其原有的父子等關系,然后重新進行刪除厢绝。由于其中序后繼節(jié)點只可能是葉子節(jié)點或者只有一個子節(jié)點,因此回到前面兩種情況懈万。
紅黑樹刪除調整步驟:
1:當前節(jié)點是紅靶病,那么:直接把當前節(jié)點變成黑色,結束
2:當前節(jié)點是黑且是根節(jié)點涕侈,那么:什么都不用做煤辨,結束
3:當前節(jié)點是黑且兄弟節(jié)點為紅色,當前節(jié)點為父節(jié)點的左子節(jié)點众辨,那么:把兄弟結點變成父節(jié)點的顏色,把父節(jié)點變成紅色郊闯,然后在父節(jié)點上做左旋,再重新開始判斷团赁。
4:當前節(jié)點是黑且兄弟節(jié)點為紅色然痊,當前節(jié)點為父節(jié)點的右子節(jié)點,那么:把兄弟結點變成父節(jié)點的顏色剧浸,把父節(jié)點變成紅色,然后在父節(jié)點上做右旋嫌变,再重新開始判斷躬它。
5:當前節(jié)點是黑且父節(jié)點和兄弟節(jié)點都為黑色,兄弟節(jié)點的兩個子節(jié)點全為黑色冯吓,那么:把兄弟節(jié)點變紅,然后把父節(jié)點當成新的當前節(jié)點凸舵,再重新開始判斷
6:當前節(jié)點是黑且兄弟節(jié)點為黑色失尖,兄弟節(jié)點的兩個子節(jié)點都是黑色,但是父節(jié)點是紅色菇夸,那么:就把兄弟節(jié)點變紅仪吧,父節(jié)點變黑,結束
7:當前節(jié)點是黑且兄弟節(jié)點為黑色薯鼠,兄弟節(jié)點的左子是紅色,右子是黑色吭从,而且當前節(jié)點是父節(jié)點的左子節(jié)點恶迈,那么:把兄弟節(jié)點變紅谱醇,兄弟左子節(jié)點變黑步做,然后對兄弟節(jié)點進行右旋,再重新開始判斷
8:當前節(jié)點是黑且兄弟節(jié)點為黑色煮剧,兄弟節(jié)點的左子是黑色将鸵,右子是紅色,而且當前節(jié)點是父節(jié)點的右子節(jié)點顶掉,那么:把兄弟節(jié)點變紅,兄弟右子節(jié)點變黑宰闰,然后對兄弟節(jié)點左旋簿透,再重新開始判斷
9:當前節(jié)點是黑且兄弟節(jié)點為黑色,兄弟節(jié)點的右子是紅色咐容,左子的顏色任意蚂维,而且當前節(jié)點是父節(jié)點的左子節(jié)點路狮,那么:把兄弟節(jié)點變成當前節(jié)點父節(jié)點的顏色,把當前節(jié)點父節(jié)點變黑奄妨,兄弟節(jié)點右子變黑,然后以當前節(jié)點的父節(jié)點為支點進行左旋评雌,結束直焙。
10:當前節(jié)點是黑且兄弟節(jié)點為黑色,兄弟節(jié)點的左子是紅色斤吐,右子的顏色任意,而且當前節(jié)點是父節(jié)點的右子節(jié)點和措,那么:把兄弟節(jié)點變成當前節(jié)點父節(jié)點的顏色派阱,把當前節(jié)點父節(jié)點變黑,兄弟節(jié)點左子變黑贫母,然后以當前節(jié)點的父節(jié)點為支點進行右旋,結束彩届。