關於紅黑樹算法的一點心得

經過幾天的奮鬥紅黑樹算法總算是大體完成了。這裏寫一點紅黑樹算法的心得,供大家參考也方便自己以後查閱。當然更希望得到大家的指正,看到自己的不足之處,及時作出修改。
一、添加算法:
新添加的節點爲紅色,所以不破壞每個支路的黑色節點個數,調整只需要通過旋轉等操作使子樹的顏色符合規則並將紅色節點向上過濾到根,根置爲黑色結束。
實際編程情況:
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塗成紅色並向上過濾。
情況2
情況3
情況4
參考博客:https://www.cnblogs.com/skywang12345/p/3245399.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章