演算法導論 第12章

2021-06-15 00:29:40 字數 993 閱讀 6869

這一章主要就講了個二叉查詢樹。有關它的所有操作。這個在前面的資料結構裡面已經具體實現過了,就不重複了,主要來說說這裡我的感受。

1.關於輸出

這個就是個中序遍歷,找左子樹,列印自己,找右子樹,over。

2.關於查詢

和遍歷類似,比較關鍵字k與root的大小,小於遞迴找左子樹。大於遞迴找右子樹。o了。

不是遞迴的版本,就是小於,就找結點往左子樹走,否則,往右子樹走,直到最後,1.要麼找到返回,2.要麼找到空,也就是沒找到。

3.關於最大和最小

容易,最大=一直往右子樹找到最後乙個葉子

二最小剛剛相反=一直往左子樹找到最後乙個葉子

4.關於後繼

x的後繼就是第乙個大於x關鍵值的那個結點。

在**?

1.x假如有右子樹,則返回右子樹裡面最小值,這個函式,前面已經實現了。

2.沒有右子樹,它的後繼的特徵就是——後繼的左兒子是x的祖先,假如你能找到,就是這個點。

5.關於插入

這個很簡單,因為所有插入的點其實都在葉子上面,所有按下面步驟:

1.你先找到這個合理的位置,也就是前面的查詢方法,非遞迴的版本

2.那麼把這個新的結點鏈結進去,就可以了,找到它的父結點,然後指定父結點它是左孩子還是右孩子。

6.關於刪除

真有點麻煩,那天畫圖一步步,終於搞懂了。

刪除點,根據位置,決定了——有3種情況。

1.沒孩子

2.有乙個孩子

3.有兩個孩子

直接說明書上例子。

1.首先我要找到要刪除點是哪個???————如果是沒有孩子或者1個孩子,那麼就是z本身,否則,就是z的後繼

2.找到要刪除點y的孩子————x

3.把x鏈結上它的爺爺結點

4.最後交換y和z,返回y就可以了。

這個邏輯,你再畫畫圖你會更好的理解。裡面還有一些小情況需要你小心注意。比如y就是根結點,還有x為空時。

反正最後的結論,就是告訴你,所以二叉樹的操作的執行時間都可以為o(h)。

演算法導論 第5章

這一章,說來說去,兩件事情,1.概率分析。2.隨機演算法。先把這個僱傭問題拿出來。問題 有一批參與面試的人,你要乙個個面試 面試每個人都要花費c1 如果當前面試者比自己的助理能力強,則辭掉當前助理的,並把當前面試者提拔為助理 僱傭乙個人要花費c2 一直面試完所有人。這裡考慮的是面試所花的money,...

演算法導論 第6章

這一章,前言講了為什麼要排序?接著介紹本章主題,堆排序。那麼什麼又是堆呢?一種資料結構,當然有很多性質,這個我在前面資料結構說過了,然後有兩種。1.大根堆 它是用來堆排序的。2.小根堆 它是用來做優先順序佇列的。清楚了這兩種用途,那麼我們來看 關於堆排序 public class heap sort...

演算法導論 第8章

這一章2個事情 1.決策樹。2.三種線性排序。關於決策樹 1.決策樹其實是對前面的堆排序,快排等是最優的比較演算法的證明。2.重要結論,定理8.1證明了任意乙個比較演算法在最壞情況下都需要做 n lg n 次的比較。3.這一節其實沒什麼內容,就是一點基本的概念,以及了解比較演算法可以通過轉換為決策樹...