談談對紅黑樹的理解


   上節說了,HashMap存儲的時候,如果鏈表的長度過長,就會將鏈表轉換成紅黑樹,那么對紅黑樹有什么理解呢?

1.每個節點非紅即黑。

2.根節點總是黑色的。

3.如果節點是紅色的,那么它的子節點必須是黑色的(反之不一定)。

4.每個葉子節點都是黑色的空節點(NIL節點)。

5.從根節點到葉節點或空節點的每條路徑,必須包含相同數目的黑色節點(即相同的黑色高度)。

想到這里,又有了問題,既然使用紅黑樹是可行的,為什么不一直使用紅黑樹呢?

       我們知道,紅黑樹屬於平衡二叉樹,為了保持平衡是需要付出代價的,但是該代價所損耗的資源要比遍歷線性鏈表要少,所以長度大於8的時候會使用紅黑樹,而當鏈表長度很短時,遍歷鏈表的速度要更快一點,所以為了效率的提高,不會一直使用紅黑樹。

那么,拉鏈法導致的鏈表過深,為什么不適用二叉樹來代替呢?

       這是因為二叉查找樹有缺陷:二叉查找樹在特殊情況下會變成一條線性結構,遍歷查找會非常慢。而紅黑樹在插入新數據后可能需要通過左旋,右旋,變色這些操作來保持平衡,而我們是為了解決鏈表查詢深度的問題,引入紅黑樹就是為了查找數據快,因此選擇紅黑樹來替換過長的鏈表。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM