在算法導論中介紹的紅黑樹,引入了"內部節點","外部節點"的概念;算法
內部節點;含有有效鍵值的節點.spa
外部節點;不含油有效鍵值,當內部節點的父節點,孩子節點爲0時,就將其指向着一個外部節點;此時能夠將"外部節點"視爲"內部節點"的孩子節點.以下圖:it
紅黑樹;平衡二叉搜索樹的一種;紅黑樹的高度始終爲 O(lgn);(其中 n 爲內部節點的個數,lgn以2爲底).從而對於查找,後繼,前驅,插入,刪除等算法來講,其時間複雜度=Θ(h)=O(lgn);
搜索
紅黑樹中任何一個節點爲紅色,或者黑色.im
根節點始終是黑色.(此時根節點的判斷就是:節點.父節點==外部節點).stl
若一個節點爲紅色,則其全部孩子節點(多是外部節點)必定是黑色.img
葉子節點老是黑色.(葉子節點就外部節點).紅黑樹
對於紅黑樹中每個節點,其到全部葉子節點的簡單路徑上具備相同數目的黑色節點.時間
對於不會改變紅黑樹結構的操做,如查找,最小值,最大值等,其實現算法能夠參考 libstdcxx/include/bits/stl_tree.h 中實現的紅黑樹.算法導論
對於插入,刪除算法;太過於複雜,因此有一個概念就行.
左旋;對節點 x 進行左旋,要求 x 具備右子樹,此時將右子樹逆時針旋轉.
右旋,對節點 y 進行右旋,要求 y 具備左子樹,此時將左子樹順時針旋轉.見下圖: