(1)概述
二叉樹是使用非常廣泛的資料結構,但如果是常規的插入,會導致二叉樹的高度過高和出現整棵樹不平衡的情況。紅黑樹是一種平衡二叉樹,c++stl中的set,map及其擴充套件容器內部的資料結構都是紅黑樹。
(2)左旋轉
**:注:parent為求父親結點的函式,root是始終指向根結點記憶體區域的指標。
//左旋轉,假設x->pright!=null
void left_rotate(node *head,node *x)//head是根結點,x是待左旋轉的結點
else
printf("item為%ld的結點不能夠進行左旋轉!",x->item);
}
(3)右旋轉
方法與左旋轉基本相同,只是方向相反,不再贅述其過程。
**:
//右旋轉,假設y->pleft!=null
void right_rotate(node *head,node *y)//head是根結點,y是待右旋轉的結點
else
printf("item為%ld的結點不能夠進行右旋轉!",y->item);
}
//返回父親結點
node *parent(node *pnode,node *head)
if(head->pright!=null)
}return result;//沒有找到,返回null
}
總結:旋轉的演算法思路非常清晰,整個邏輯思考是重點。 紅黑樹系列之旋轉
1 概述 二叉樹是使用非常廣泛的資料結構,但如果是常規的插入,會導致二叉樹的高度過高和出現整棵樹不平衡的情況。紅黑樹是一種平衡二叉樹,c stl中的set,map及其擴充套件容器內部的資料結構都是紅黑樹。2 左旋轉 比如說,需要把x旋轉為y的左結點。整個演算法的思路非常清晰 從上至下,先得到y指標,...
紅黑樹系列之旋轉
1 概述 二叉樹是使用非常廣泛的資料結構,但如果是常規的插入,會導致二叉樹的高度過高和出現整棵樹不平衡的情況。紅黑樹是一種平衡二叉樹,c stl中的set,map及其擴充套件容器內部的資料結構都是紅黑樹。2 左旋轉 比如說,需要把x旋轉為y的左結點。整個演算法的思路非常清晰 從上至下,先得到y指標,...
紅黑樹 旋轉
此篇部落格我們討論紅黑樹的旋轉 左旋和右旋 為了更好的理解旋轉,我們只關注紅黑樹中關於二叉查詢樹部分的規則,而不關注紅黑樹中關於本身紅黑樹定義部分的規則。左旋現有紅黑樹結構如下 為了更好的理解,我們給節點x y a b和c乙個值,並把要進行左旋的節點x標為紅色 注意 和紅黑樹的紅色沒關係,僅僅起乙個...