二叉查找樹的刪除分為兩種方式:
二叉查找樹,本質上是一棵排序樹,具體不解釋了。對於二叉樹的刪除操作。有兩種方式:合並刪除和排序刪除:
合並刪除:
圖1 原始二叉樹
合並刪除的本質在於:假如我們要刪除結點A,那么,對於其左右子樹B,C應該怎么辦呢?
方法是:找到A的左子樹中最大值結點(這里是E),實質上是找到左子樹中最右邊的節點。然后將A節點的右子樹合並到E的下面,刪除A即可。即如下圖:
圖2 合並刪除
可以看到,合並的實質是將A的右子樹合並到左子樹上!!!。而且可以看出,合並刪除導致樹的高度發生變化,極其容易導致樹結構的不平衡(樹的平衡性對樹而言是很重要的特性)。
再看復制刪除:
復制刪除:
復制刪除的本質在於復制!!!假如我們要刪除A,本質上,我們只是想讓具有某個值的節點不存在,我們換一種思路,我們不刪除這個結點,而是讓這個節點被覆蓋(被復制)。那么被誰覆蓋呢?被A的左子樹中最大值結點(這里是E),這一點和合並刪除是相同的。復制刪除結點如下:
圖3 復制刪除
復制刪除表面上,沒有改變樹的深度,所以講對於樹的刪除是更優的。