二叉查找樹(Binary Search Tree)是一種非常重要的資料結構。它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大于它的根結點的值; 它的左、右子樹也分别為二叉排序樹。
二叉查找樹的操作包括建立,插入節點,周遊,删除節點等。其中删除節點是其中較為麻煩的操作,故一下着重讨論它的節點删除算法。
1.我們現在有一棵二叉查找樹。很容易發現,它的中序周遊數組{2.3.4.5.6.8.9}具有遞增的性質。

2.我們這裡示範删除5節點,也就是該二叉樹的根結點。那麼問題來了,删除了這個節點,我們用哪個節點來頂替它才能繼續保持二叉查找樹的性質呢?頂替它的節點應當是值和它最相近的節點,即中序周遊時在該節點前一個周遊的節點或後一個周遊的節點。觀察中序周遊數組可知,這兩個節點就是和5節點相鄰的4節點和6節點。我們這裡決定選6節點頂替它。我們可以編寫一個Findmin函數在5節點的右子樹中查找最小的節點(6節點),并傳回6節點的位置。
3.找到“頂替結點”(6節點)的位置了,我們可以将"頂替節點”的值賦給待删除的5節點,以替換掉待删除的節點。完成該步操作後,中序周遊數組為{2,3,4,6,6,8,9}
4.接着,我們隻需要把頂替節點删除即可。至此,删除節點操作正式完成。最終中序周遊數組為{2,3,4,6,8,9}
1.節點類的聲明:
2.二叉樹類的聲明,類的方法包括3個用于插入,删除和周遊的對外接口以及實作這些操作的成員函數。
3.二叉樹析構函數的驅動程式及其實作函數
3.二叉樹插入節點的對外接口及其實作函數
4.二叉樹删除節點的對外接口及其實作函數
5.Findmin函數實作,查找“頂替節點”,即待删除節點右子樹中最小的節點(中序周遊中在待删除節點之後周遊的節點),并傳回其位址。
6.二叉樹節點的查找函數,從根點開始遞歸地查找具有某個值的節點,并傳回這個節點的位址。
7.二叉樹的中序周遊函數,這裡采用非遞歸方式周遊。
8.最後,用main函數進行功能測試。
數學是符号的藝術,音樂是上界的語言。