背景
- 記錄紅黑樹的基礎知識。
- 紅黑樹的一個實踐是JDK源碼HashMap。
過程
- 紅黑樹的基本性質
- 節點顏色只有兩種:紅色或者黑色。
- 根節點顏色是黑色的。
- 父親節點和兒子節點不能同時爲紅色的。
- 祖父節點、父親節點、兒子節點卻可以同時爲黑色的。
- 從根節點出發,每一個分支的黑色節點的數目一定是相等的,這也是紅黑樹保證自平衡的一個條件。
- 一般在實踐過程中,我們的Node的顏色默認是紅色的。但是,插入節點的時候,默認顏色卻變成了黑色的,然後執行自平衡算法過程。
- 基礎操作?
- 變色:把節點的顏色變成紅色或者黑色。
- 旋轉:左旋轉,右旋轉。
- 變色的條件是什麼?
- 那就是分支之間的黑色節點數目出現不一致了。
- 旋轉的條件是什麼?
- 某一個分支,比如左分子比右分支的節點數量多了一些,這裏的一些表達一定的程度數量。
- 左分子多了,那就右旋轉,拉扯即可。如果右分支多了,那就左旋轉,拉扯即可。
- 記住哪個分支節點多了一層,那麼就一定需要旋轉。
- 記住左右是對稱的。如果能記住並理解祖父節點的左子樹的規律,那麼調換過來,就一定能夠記住並理解右子樹的規律。
小結
- 總結紅黑樹的基本特徵知識。
- 紅黑樹的操作:變色與旋轉。
- 變色的條件是什麼?旋轉的條件是什麼?旋轉的時候是左旋轉還是右旋轉呢?