1. 程式人生 > >並查集的刪除操作

並查集的刪除操作

對於刪除操作,在完美的並查集中(所有節點都直接連線在根節點上),理論上只要把要刪除的節點的上級重新指向自己就可以了。

但是實際情況中,我們的並查集形成的樹的形態都是不可預估形態的,如果直接將一個節點指向自己可能會將他的“下級”和他一起刪除,這就和我們的想法違背了。

所以在一個需要刪除的並查集中初始化時就要處理一下:

 

  • 首先可以將每一個點都設立一個虛擬父節點,這樣根節點就是我們設立的虛擬節點,類似於將每個節點放到一個盒子中
  • 如果刪除某點,那麼可以修改當前節點的父節點來導致當前點的孤立,即刪除時把這個節點從當前盒子拿出來,放到另一個盒子中。
  • 由於節點之間都是通過盒子來確定關係的,所以盒子中元素是否存在並不影響節點之間的關係。

於是我們就找到了,並查集中刪除某個節點的方法

 

如果要刪除2號節點,那麼我們把2拿出來放到另一個盒子中就可以了,可以看到原來的那個樹結構並沒有發生變化。但是2已經不在這裡面了