將乙個結點從二叉查詢樹中刪除之後,剩下的結點可能會不滿足二叉查詢樹的性質,因此,在刪除結點之後要對樹進行調整,使其滿足二叉查詢樹的性質。根據結點的孩子的數量,將刪除操作分為三種情況,我們記要刪除的結點為z,實際上刪除的結點為y。
1. z結點沒有孩子。
如下圖a所示,我們要刪除值為13的結點,因為結點沒有孩子,所以刪除之後不會影響到二叉樹的整體性質,也就是說,直接將13這個結點刪除即可,如圖a所示,從左邊的二叉樹刪除13這個點之後變到右邊的二叉樹。
2. z結點有乙個孩子。
如下圖b所示,要刪除的值為16的結點有乙個孩子,而且是右孩子,那麼從圖上來看,如果,我們將16去掉,然後把以20為結點的子樹作為15的右子樹,那麼整棵樹還是符合二叉查詢樹的性質的,因此,有乙個孩子的結點的刪除操作,就是要將其孩子作為其父結點的孩子即可。如圖b所示。
3. z結點有兩個孩子。
如下圖c所示,要刪除的值為5的結點,有兩個孩子,刪除之後肯定整棵樹就不符合二叉查詢樹的性質了,因此要進行調整,我們發現,將5的後繼,值為6的結點來放到5的位置,然後將6的孩子7作為6的父結點10的孩子,如下圖c所示,我們要刪除的是z結點,而我們實際要刪除y結點,並替換z結點。這裡需要注意的一點是,如果乙個結點有右孩子,則該結點的後繼,至多有乙個子女,而且是右孩子。因為假如該結點的後繼有左孩子和右孩子,那麼其左孩子的值肯定是介於該結點和其後繼之間的,那麼按照二叉查詢樹的性質,這個左孩子就應該是該結點的後繼,所以,這與原先的後繼相互矛盾,因此,結論成立。
二叉查詢樹 插入 刪除 查詢
二叉查詢樹是滿足以下條件的二叉樹 1.左子樹上的所有節點值均小於根節點值,2右子樹上的所有節點值均不小於根節點值,3,左右子樹也滿足上述兩個條件。二叉查詢樹的插入過程如下 1.若當前的二叉查詢樹為空,則插入的元素為根節點,2.若插入的元素值小於根節點值,則將元素插入到左子樹中,3.若插入的元素值不小...
二叉查詢樹 插入 刪除 查詢
二叉查詢樹 插入 刪除 查詢 二叉查詢樹 是滿足以下條件的二叉樹 1.左子樹上的所有節點值均小於根節點值,2右子樹上的所有節點值均不小於根節點值,3,左右子樹也滿足上述兩個條件。二叉查詢樹的插入 過程如下 1.若當前的二叉查詢樹為空,則插入的元素為根節點,2.若插入的元素值小於根節點值,則將元素插入...
二叉查詢樹的查詢 插入 刪除
二叉查詢樹 英語 binary search tree 也稱為二叉搜尋樹 有序二叉樹 ordered binary tree 或排序二叉樹 sorted binary tree 是指一棵空樹或者具有下列性質的二叉樹 若任意節點的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 若任意節點的右子...