1. 程式人生 > >20172315 2018-2019-2 《程序設計與數據結構》第七周學習總結

20172315 2018-2019-2 《程序設計與數據結構》第七周學習總結

刪除 data 內容 雲上 指向 深度 鍵值 第七周 java

20172315 2018-2019-2 《程序設計與數據結構》第七周學習總結

教材學習內容總結

  • 二又查找樹是一種含有附加屬性的二又樹,即其左孩子小於父結點,而父結點又小於或等於右孩子。
  • 技術分享圖片
  • 每個BinaryTreeNode對象要維護一個指向結點所存儲元素的引用,另外還要維護指向結點的每個孩子的引用。
  • 技術分享圖片
  • 從二又查找樹中刪除一個元素時,必須推選出另一個結點來代替要被刪除的那個結點。
  • 技術分享圖片
  • 二又查找樹的最右側結點會存放最大元素,而其最左側結點會存放最小元素。
  • 技術分享圖片
  • 技術分享圖片
  • 技術分享圖片
  • 如果二又查找樹不平衡,其效率可能比線性結構的還要低。
  • 右子樹的高度減去左子樹的高度稱為該結點的平衡因子。
  • 樹(或樹的任何子樹)只有兩種途徑能變得不平衡:插入結點或刪除結點。
  • 紅黑樹
    根結點為黑色。
    紅色結點的所有孩子都為黑色。
    從樹根到樹葉的每條路徑都包含同樣數目的黑色結點。

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

  • 問題1:書上講的紅黑樹不太理解
  • 問題1解決方案:在藍墨雲上找到老師推薦的網站加深理解
    紅黑樹(Red-Black Tree,簡稱R-B Tree),它一種特殊的二叉查找樹。
    紅黑樹是特殊的二叉查找樹,意味著它滿足二叉查找樹的特征:任意一個節點所包含的鍵值,大於等於左孩子的鍵值,小於等於右孩子的鍵值。
    除了具備該特性之外,紅黑樹還包括許多額外的信息。

紅黑樹的每個節點上都有存儲位表示節點的顏色,顏色是紅(Red)或黑(Black)。
紅黑樹的特性:

(1) 每個節點或者是黑色,或者是紅色。

(2) 根節點是黑色。

(3) 每個葉子節點是黑色。 [註意:這裏葉子節點,是指為空的葉子節點!]

(4) 如果一個節點是紅色的,則它的子節點必須是黑色的。

(5) 從一個節點到該節點的子孫節點的所有路徑上包含相同數目的黑節點。

關於它的特性,需要註意的是:
第一,特性(3)中的葉子節點,是只為空(NIL或null)的節點。
第二,特性(5),確保沒有一條路徑會比其他路徑長出倆倍。因而,紅黑樹是相對是接近平衡的二叉樹。

紅黑樹示意圖如下:

技術分享圖片

參考資料
資料
參考文獻

  • 問題2:書上的avl樹無法理解
  • 問題2解決方案:在網上查詢資料:平衡二叉樹定義(AVL):它或者是一顆空樹,或者具有以下性質的二叉樹:它的左子樹和右子樹的深度之差(平衡因子)的絕對值不超過1,且它的左子樹和右子樹都是一顆平衡二叉樹。

平衡因子(bf):結點的左子樹的深度減去右子樹的深度
資料

代碼調試中的問題和解決過程

  • 問題1:對於pp11.8如何實現avl樹仍然有疑惑
  • 問題1解決方案:在網上找到了一篇博客,參考他的講解後完成
    AVL樹(三)之 Java的實現

    代碼托管

    技術分享圖片

(statistics.sh腳本的運行結果截圖)

上周考試錯題總結

上周無錯題~

結對及互評

點評模板:

  • 博客中值得學習的或問題:
    • 博客中圖片過少
    • 對於教材內容解析很到位
  • 代碼中值得學習的或問題:
    • 代碼簡潔明了
    • 代碼不太規範,註釋過少

點評過的同學博客和代碼

  • 本周結對學習情況
    • 20172318
    • 結對學習內容
      • 第十一章
  • 上周博客互評情況
    • 20172318

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 0/0 0/0 0/0
第二周 800/800 2/2 18/18
第三周 600/1400 3/5 22/40
第四周 700/1300 3/8 22/62
第五周 400/1700 3/11 22/84
第六周 200/1900 2/13 20/94
第七周 400/2300 2/15 20/114

參考資料

  • 參考資料
  • 資料
  • 參考文獻
  • 資料
  • 藍墨雲

20172315 2018-2019-2 《程序設計與數據結構》第七周學習總結