20162320大二第8周學習總結

2022-04-03 05:23:00 字數 2106 閱讀 8204

一、二叉查詢樹

二叉查詢樹,對於每個結點n,n的左子樹中包含的元素都小於n中的元素,n的右子樹中包含的元素都大於等於n中的元素,即左子樹上的元素小於父結點的值,而右子樹上的元素大於等於父結點的值。如下圖所示。根結點的左子樹每個元素都小於80,右子樹每個元素都大於80.

查詢方法,要判定乙個具體的目標是否存在於樹中,需要沿著從根開始的路徑,根據查詢目標是小於還是大於當前結點的值,相應地轉到當前結點的左子結點或右結點。最終或是找到目標元素,或是遇到路徑的末端,後者意味著目標不在樹中。

在二叉查詢樹中新增元素,改過程類似於樹的查詢過程,新元素新增為樹的葉結點,從根開始,沿著每個結點中元素所確定的路徑,直到相應地方向上沒有子結點為止,此時,將新元素新增為葉結點。

如果沒有其他操作,二叉查詢樹的樹形由元素的新增順序來決定。

注:如果輸入是完全有序的,二叉查詢樹就會退化為乙個有序鍊錶,削弱了它本身的價值,如下圖所示。

在二叉查詢樹中刪除元素,要考慮如下三種情況(參考下圖):

當從二叉查詢樹中刪除有兩個子結點的結點是,比較好的辦法是用它的中序後繼來取代它,即在中序遍歷中排在被刪元素之後的那個元素(緊鄰的下乙個值)

二、平衡二叉查詢樹

在平衡二叉樹中進行查詢,比在退化的樹中進行查詢的效率高很多。在有n個結點的平衡樹中進行查詢及新增操作的效率是進行o(log2 n)次比較(最長路徑的長度)。樹越退化,查詢及新增操作的時間複雜度越接近o(n),它抵消了使用查詢樹帶來的益處。

可以對二叉查詢樹進行旋轉以恢復平衡

右旋轉

右旋轉

並非所有的不平衡情況都可以用乙個單一的旋轉解決,如果不平衡性是由根的右子結點的左子樹的長路徑引發的,則必須先繞那個異常子樹執行一次右旋轉,然後再繞根執行一次左旋轉(右-左旋轉)。如果不平衡是由根的左子結點的右子樹中的長路徑引發,則執行(左-右旋轉)

詳情見我的實驗部落格

(statistics.sh指令碼的執行結果截圖)

暫未給出答案

我會像奧德休斯一樣, 朝著心中的方向 ,哪怕眾神會在彼岸阻擋 。當我需要獨自站在 ,遠方的沙場 ,**就是我緊握的夢想 ,而我受過的傷 ,都是我的勳章 。繼續加油!

**行數(新增/累積)

部落格量(新增/累積)

學習時間(新增/累積)

重要成長

目標5000行

400小時

第一周188

1/125

演算法分析

第二週70/258

1/215/40

《構建之法》7-9章

第三週474/732

1/320/60

查詢和排序

第四五六周

1313/2045

4/712/72

棧和佇列

第七周890/2935

1/814/86

樹第八周

913/3848

1/920/106

二叉查詢樹

第九周(有空多看看現代軟體工程 課件 軟體工程師能力自我評價表)

20162320劉先潤大二第7周學習總結

一.樹 樹是非線性結構,其中的元素組織為乙個結構層次。而之前的集合 棧 佇列及鍊錶 都是線性資料結構,即他們的元素可以乙個接乙個排列。樹 tree 是有一組邊 edge 夠構成,結點用來儲存元素,邊表示結點之間的連線。如下圖所示,書中較低一層的結點稱為其前一層結點的子節點 children 乙個結點...

20162320劉先潤大二第6周學習總結

佇列元素按fifo的方式處理 最先進入的元素最先離開 佇列是儲存重複編碼k值的一種有效結構。實現模擬時常用佇列來表示等待的一列 教材實現方法 首先建立customer類,記錄了顧客到達的時間及買完票後離開的時間,離開時間減去到達時間就是顧客買票所花費總時間,然後ticketcounter模擬這個場景...

20162320劉先潤大二第3周學習總結

線性查詢,從一端開始以線性的方式掃瞄找池。下圖是我繪製的乙個說明圖 二分查詢,借助查詢池中資料的有序性,每次從中間開始查詢,即每次比較都會將物件的範圍縮小一倍,排除了一半的可行候選資料。選擇排序 反覆地將乙個個具體的值放到它最終的有序位置,從而完成一組值的排序。我的理解 每一次從將要排序的資料中選出...