徹底理解面試難點之rb-tree(紅黑樹)續--對紅黑樹的插入和刪除操作的一些理解!!!

這裏主要講一下對紅黑樹的插入和刪除操作的一些理解

對於紅黑樹的一些相關性質的介紹,上篇已經講了,這裏不再介紹,有需要了解的,可以翻前面的博客看看。

1、紅黑樹的插入操作
對於紅黑樹的元素插入,我們首先要通過查找來確定插入元素在樹中所在的位置,毫無疑問,插入節點一定爲葉子結點。一般我們會將葉子結點置爲紅色。
然後,我們要看看加入葉子結點之後,整棵紅黑樹的平衡有沒有打破。如果平衡被打破了,我們需要通過左旋、右旋、節點變色這三種自平衡方式來使整棵樹達到一個新的平衡。這裏我給個鏈接,大家可以看看具體情況的分析,我認爲還是很好理解、看懂的。
https://www.jianshu.com/p/e136ec79235c

2、紅黑樹的刪除操作
對於紅黑樹的刪除操作而言,我個人的理解是,在要刪除節點不是葉子結點的情況下,將要刪除的節點看成一顆子樹的根節點,對此子樹我們不要求它的根節點也就是刪除節點一定是黑色。
然後,在這棵子樹的葉子節點中找一個顏色和刪除節點一致的,將其替換到要刪除節點的位置,這樣首先達到了刪除節點的目的。然後,也不會違背紅黑樹的幾條性質。我們只要將此時的紅黑樹看成是一顆普通的二叉樹,自上而下的交換節點的值,使其重新滿足二叉查找樹的性質,這樣整個紅黑樹的刪除操作就完成了。
以上是考慮的刪除節點不是葉子結點的情況,在刪除節點是葉子結點的情況下,我們需要考慮怎麼維持整棵紅黑樹的每條路徑黑色節點個數一樣,也就是局部調節點的顏色。還有就是有可能刪除此葉子節點會導致左右子樹的高度差大於一,此時需要通過左旋、右旋、變色來實現一個新的平衡。

我對刪除操作思想的一個總結是:用葉子結點去替換要刪除的節點,然後再自上而下替換節點位置(這裏相當於二叉樹查找操作)直到平衡即可。還有就是不管插入、刪除操作分幾種情況,其實它們的基本操作就是左旋、右旋、變色操作,從而達到紅黑樹的一個新的平衡。只要瞭解這三種基本操作,其實情況再多也就那樣了。紅黑樹並不可怕,只要耐心的去看、去學,其實它就是一個不是很難但是確實很令人驚歎的數據結構而已。

以上是本人查閱資料的一些理解,希望能幫助大家拓寬思路,加深對紅黑樹的理解,如有不對之處,還望指正,謝謝!!!

再附一個個人認爲比較好的鏈接:https://blog.csdn.net/v_JULY_v/article/details/6105630

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章