紅黑樹
紅黑樹的底層數據結構就是一棵二叉查找樹(自平衡的二叉查找樹)
二叉搜索樹也叫二叉查找樹,二叉排序樹。
- 每個結點不是紅色,就是黑色
- 不可能有連在一起的紅色結點,兩個黑色結點連在一起是可以的。
- 根結點是黑色。
- 每個紅色結點的兩個子結點都是黑色,葉子結點都是黑色,
紅黑樹的變換規則:
- 改變顏色,紅變黑,黑邊紅
- 左旋
- 右旋
旋轉和顏色變換規則:
所有的插入的點默認都是紅色。
- 變顏色的情況(如圖1中插入結點6後的,6,7結點):
當前結點的父親是紅色,且它的祖父結點的另一個子節點(叔叔結點)也是紅色
變顏色的規則:
- 把父節點設爲黑色
- 把叔叔結點也變爲黑色
- 把祖父也就是父親的父親(爺爺)結點設爲紅色
- 把指針定義到祖父結點設爲當前要操作的(爺爺)分析的點變換規則
- 左旋,(如圖2中的12,5結點,做左旋)
當前父節點是紅色,叔叔是黑色的時候,且當前的結點是右子樹,左旋,
以父節點作爲根結點左旋,如圖2中的12,5結點,做左旋
- 右旋,(如圖3的5,12結點)
當前父節點是紅色,叔叔是黑色的時候,且當前的結點是左子樹,右旋。
右旋規則:
- 把父節點變爲黑色
- 把祖父結點變爲紅色(爺爺)
- 以祖父結點(爺爺)做選擇。如圖3中,是以19結點右旋。
待續。。。