查找樹ADT——二叉查找樹

使二叉樹成爲二叉查找樹的性質是,對於樹中的每個節點X,其左子樹中所有關鍵字值小於X的關鍵字值,右邊相反。即該樹所有元素可以用某種統一的方式排序。
二叉查找樹平均深度:O(log N)

1.MakeEmpty
主要用於初始化,緊密遵循樹的遞歸定義。
二叉查找樹聲明

2.Find
這個操作一般需要返回指向樹T中具有關鍵字X的節點的指針,如果這樣的節點不存在,返回NULL;否則,如果存儲在T中的關鍵字是X,返回T,;否則,我們對樹T的左子樹或右子樹進行一次遞歸調用,這依賴於X與存儲在T中的關鍵字的關係。
注意:首先要判斷是否爲空樹,防止在NULL指針上兜圈子。

3.FindMin 和 FindMax
這些例程分別返回最大元和最小元的位置。雖然返回這些元素的準確值似乎更合理,但是這將與Find操作不相容。更重要的是,看起來類似的操作做的工作也是類似的。一直往左一直往右可以分別得到Max和Min。
注意:小心處理空樹這種退化情況,在遞歸程序中它尤爲重要。此外,對T的改變是安全的,因爲我們只用拷貝來進行工作。

4.Insert
插入操作的例程較爲簡單。爲了將X插入到樹T中,你可以用Find那樣沿着樹查找,最終將X插入到遍歷的最後一點上。
重複元的插入可以通過在節點記錄中保留一個附加域以指示發生的頻率來處理。防止重複信息放到樹中,導致樹的深度變得很大。

5.Delete
正如許多數據結構一樣,最困難的操作是刪除。
這裏要用到分類討論了,若節點是一片樹葉,那麼它可以立即被刪除;若節點有一個兒子,則該節點可以在其父節點調整指針繞過該節點,然後再刪除該節點;複雜的情況是處理具有兩個兒子的節點,這種情況可以將左子樹的最小值所在節點頂替被刪除節點的位置,然後被刪節點的左右孩子順勢安排即可‘。

大體上個人感覺鏈表學的好那麼樹應該相對簡單一點。跟鏈表一樣,主要是遍歷,插入,刪除操作。具體情況可能會比較複雜,根據實際情況分析。

參考書籍:數據結構與算法分析
有問題評論區,將持續更新

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