1. 程式人生 > >20172316 2018-2019-1《程式設計與資料結構》第七週學習總結

20172316 2018-2019-1《程式設計與資料結構》第七週學習總結

20172316 2018-2019-1《程式設計與資料結構》第七週學習總結

教材學習內容總結

第十一章 二叉查詢樹

二叉查詢樹:

上個星期學習了樹,本星期接著學習樹的一種擴充套件:二叉查詢樹(Binary Search Tree)。它最大的特點就是左孩子小於父節點,右孩子大於父節點,這種特點讓二叉查詢樹從建立到插入元素都能維持排序的屬性(主要表現在:中序遍歷時元素能準確按照由小到大的順序排列),有利於之後對樹中元素的處理,特別是需要用到搜尋時能大大提高搜尋效率(低至O(log₂n))(不平衡樹除外╰(‵□′)╯)。

操作 說明
addElement 往樹中新增一個元素
removeElement 從樹中刪除一個元素
removeAllOccurences 從樹中刪除所指定元素的任何存在
removeMin 刪除樹中的最小元素
removeMax 刪除樹中的最大元素
findMin 返回一個指向樹中最小元素的引用
findMax 返回一個指向樹中最大元素的引用

平衡二叉查詢樹:

二叉查詢樹要表現出它高效的優點,必須要達到平衡,否則其效率甚至不如線性的連結串列。
(圖)

為此,書中介紹了平衡化二叉查詢樹的方法——旋轉,兩種平衡化二叉查詢樹——AVL樹、紅黑樹。
旋轉:以右旋為例,其應用於左子樹高度過高的非平衡樹的平衡化中,步驟為:

  1. 使(子)樹根的左孩子元素成為新的根元素;
  2. 使原根元素成為這個新樹根的右孩子元素;
  3. 使原樹根的左孩子的右孩子,成為原樹根的新的左孩子。

(圖)

左旋反之。並非所有不平衡問題只需要一次旋轉就夠解決了,在具體過程中要應變地使用左右旋轉。

教材學習中的問題和解決過程

一、紅黑樹與AVL樹作為平衡化二叉查詢樹的手段,兩者到底各有何種優越性?

  1. 紅黑樹不追求"完全平衡",書中提到:

    在某種程度上,紅黑樹中的平衡限制沒有AVL樹那麼嚴格。但是...

非嚴格的平衡給紅黑樹帶來了什麼好處呢?——它的旋轉次數得到降低,任何不平衡將在3次旋轉以內解決,對於插入和刪除導致的失衡,紅黑樹可以更快地調整自己的平衡。

  1. AVL樹實現完全平衡也有自己的好處,我們之所以平衡化二叉查詢樹,就是為了提高搜尋效率,完全平衡相對應的當然就是最高效的搜尋效率。

二、


程式碼除錯中的問題和解決過程

(無)


程式碼託管

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


上週考試錯題總結

上週無錯題


學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 6/6
第二週 771/771 1/2 16/22
第三週 562/1233 1/3 15/37
第四周 1503/2736 2/5 15/52
第五週 1152/3888 1/6 10/62
第六週 787/4675 1/7 10/72
第七週 1214/5889 1/8 9/81

結對互評

唐才銘19
王文彬29

參考資料