在刪除二叉排序樹上某個結點之后,仍然保持二叉排序樹的特性,即:二叉排序樹中任一結點x,其左(右)子樹中任一結點y(若存在)的關鍵字必小(大)於x的關鍵字
刪除結點有三種情況
1.被刪除的結點是葉子
2.被刪除的結點只有左子樹或者只有右子樹
3.被刪除的結點既有左子樹,也有右子樹
第一種:被刪除的結點是葉子
由於要刪除的結點p即無左子樹,又無右子樹,
因此刪除結點p之后不會破壞二叉排序樹結構的完整性,
只要將其雙親結點f原來指向p的指針改為指向空即可
第二種:被刪除的結點只有左子樹或者只有右子樹
要刪除的結點p只有左子樹PL或者右子樹PR,
這時候只要將p的左子樹PL或p的右子樹PR
直接作為其雙親結點f 的相應左子樹或右子樹即可
第三種:被刪除的結點既有左子樹,也有右子樹
要刪除的結點p只有左子樹PL或者右子樹PR,
第一種方法是:
要刪除結點p若為其雙親結點f 的右子樹,
則令p的左子樹PL成為其雙親結點f 的右子樹,
然后令p的右子樹PR成為中序遍歷下p的直接前驅s的右子樹
例一:
先寫出該樹的中序遍歷順序:CL,C,QL, Q,SL,S,P,PR,F
此時p的直接前驅為S,則刪除P的時候,P的右子樹作為S的右子樹
同時將p的左子樹作為其雙親節點的左子樹即可
第二種方法是:
令p的中序下的直接前驅s或直接后繼結點代替p結點,
同時刪除其中序下的前驅結點s(或中序下的后繼結點)