摘要: 紅黑樹(shù)本質(zhì)是二叉查找樹(shù)的一種,它的性能高于普通的二叉查找樹(shù),即使是在最壞的情況下也能保證時(shí)間復(fù)雜度為O(lgn)。紅黑樹(shù)在每個(gè)結(jié)點(diǎn)上增加一個(gè)存儲(chǔ)位表示結(jié)點(diǎn)的顏色(或紅或黑,故稱紅黑樹(shù))。通過(guò)對(duì)任何一條從根到葉子的路徑上各個(gè)結(jié)點(diǎn)著色方式的限制,紅黑樹(shù)可以保證沒(méi)有一條路徑會(huì)比其他路徑長(zhǎng)出兩倍,因而是接近平衡的。
紅黑樹(shù)的每個(gè)結(jié)點(diǎn)至少包含五個(gè)域:color,key,left,right 和 parent(一般我們都會(huì)在結(jié)點(diǎn)中存儲(chǔ)額外的數(shù)據(jù) data,但前面的五個(gè)域是必不可少的),如果某個(gè)結(jié)點(diǎn)沒(méi)有子結(jié)點(diǎn)或者結(jié)節(jié)點(diǎn),則將相應(yīng)的指針設(shè)置為空值(NIL,注意不是 NULL,NIL是一個(gè)特定的空結(jié)點(diǎn)對(duì)象,類似于Obj-C 中 Nil對(duì)象)。我們將這些 NIL 當(dāng)作葉子結(jié)點(diǎn)(在實(shí)際處理過(guò)程中,往往將最底層的孩子結(jié)點(diǎn)和根結(jié)點(diǎn)的父親都指向同一個(gè) NIL 結(jié)點(diǎn),以便于處理紅黑樹(shù)代碼中的邊界條件),而將其它結(jié)點(diǎn)當(dāng)作內(nèi)結(jié)點(diǎn)。
閱讀全文