bstree的插入刪除函數

搜索二叉樹的插入函數:

從根結點去尋找要插入的結點,如果值相等,則插入失敗返回;如果key小於結點值則向左走,如果大於則向右走,直到按這個規則到達樹葉子結點,則爲插入的位置,然後new出這個結點插入.


搜索二叉樹的刪除:

先是從根開始去尋找要刪除的結點(從根遍歷如果值相等的找到,如果小與則向左尋找,如果大於則向右尋找),找到後執行刪除動作,分爲兩種大的情況:

1.要刪除的結點既有左邊孩子又有右邊孩子,這種情況直接刪除不好操作,則將問題轉化, 因爲該結點的值是介於左樹最大結點值和右樹最小結點的值之間所以我們可以將 左子樹中最大結點或者右樹裏最小結點來替該結點,然後去刪除左子樹中最大結點或者右樹裏最小結點. 具體操作是在左子樹裏查找最大的結點或者在右子樹裏查找最小的結點,找到後將該結點的值去替換要刪除的結點得值,然後問題轉化爲刪除左樹最大的結點或者右樹最小的結點,然後去刪除相應的結點,這個結點一般最多是隻有一個子樹,所以比較好刪除.

2.要刪除的結點只有一個孩子,只有左孩子或者只有右孩子,或者沒有孩子自己爲葉子結點.這種和上面的第1種情況最終轉化到的結果是一樣的.只要將僅有的一個孩子提上去就行,或者沒有孩子時將NULL提上去就行.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章