二叉排序樹,是非常特殊的一種樹,具體定義見任何一本數據結構書籍。
其刪除一個節點需要考慮對應節點的狀態,具體的說就是,是否存在左右節點,等等。需要按照以下情況討論。
1.查找待刪除節點,在查找的同時需要記錄一下待刪除節點的父親。
2.如果待刪除節點的左右節點都不存在,那么直接刪除。
3.如果待刪除節點左子樹存在右子樹不存在,或者左子樹不存在右子樹存在。直接將其子樹中存在的一邊候補上來即可。
4.如果待刪除節點左右子樹都在,這個情況是最復雜的。需要按照二叉排序樹的性質從其左子樹或者有子樹中選擇節點補到待刪除節點的位置。
如果從左子樹中選,就應該選擇左子樹中最右邊的那個葉子節點(這里肯定是葉子,如果不是葉子,那么就不是最右邊的節點)
如果從右子樹中選,就應該選擇有子樹中最左邊的那個葉子節點。
具體代碼如下: