1. 程式人生 > >20172301 《程序設計與數據結構》第六周學習總結

20172301 《程序設計與數據結構》第六周學習總結

層序遍歷 linked 解決 及其 lang 決策 轉換成 eve 結點

20172301 《程序設計與數據結構》第六周學習總結

教材學習內容總結

  • 樹的概述
    • 樹由一個包含結點的集構成。
  • 樹(一種非線性結構,其中的元素被組織成一個層次結構)

    • 結點:樹中的一個位置。
    • :樹中兩個結點的連接。
    • 根結點:就是指位於該樹頂層的唯一結點。一棵樹只有一個根結點,根結點沒有父節點。
    • 子結點:一個樹中較低層的結點是上一層結點的子結點。位於樹中當前結點下面的結點,並由邊與之直接連接。
    • 同胞結點:屬於同一結點的子結點。
    • 葉結點:沒有任何子結點的結點。
    • 內部節點:一個至少有一個子結點的非根節點。
    • 祖先節點:位於當前結點以上的結點。
    • 後代結點:位於當前結點一下的結點。
    • 路徑長度:通過計算從根到該結點所必須越過的邊數目。
    • 高度:從根到葉子之間的最遠路徑的長度。
    • 階(度):樹中任一結點可以具有的最大子結點的數目。
  • 樹的分類:
    • 二叉樹:結點最多具有兩個孩子的樹。
    • 完全樹:如果某樹是平衡的,且底層所有葉子都位於樹的左邊,則認為該樹是完全的。
    • 滿樹:如果一顆n元樹的所有葉子都位於同一層且每一結點要麽是一片葉子,要麽是正好具有n個孩子。
    • 完全二叉樹:在每個K層上都有2^k個結點,最後一層除外,在最後一層中的結點必須是在最左邊結點。
  • 樹的遍歷:
    • 前序遍歷:從根結點開始,訪問每一個結點及其孩子。(A->B->D->E->C)
    • 中序遍歷:從根結點開始,訪問結點的左側孩子,然後是該結點,再然後是任何剩余的結點。(D->B->E->A->C)
    • 後序遍歷:從根結點開始,訪問結點的孩子,然後是該結點。(D->E->B->C->A)
    • 層序遍歷:從根節點開始,訪問每一層的所有結點,一次一層。(A->B->C->D->E)
  • 二叉樹--表達式樹表達式樹的及其內部結點包含著操作,且所有葉子也包含著操作數。對操作樹的求值是從下往上的。

  • 二叉樹--決策樹(背部疼痛診斷器)決策樹的結點表示決策點,其子結點表示在該決策點的可選項。決策樹的葉結點表示可能的判斷,這些推斷是根據決策結果得出的。

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

  • 問題1:type作用?
  • 問題1解決方案:XXXXXX
  • 問題2:XXXXXX
  • 問題2解決方案:XXXXXX
  • ...

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

  • 問題1:背部疼痛診斷器找不到文件。
  • 問題1解決方案:
    • 這是一個小錯誤,本來我還以為文件名字和文件添加位置不對。實際上,雖然我把txt文件和診斷器程序放在了一個文件夾裏面,但是他還是不能直接通過名字進行查找。
    • 小組成員段誌軒同學告訴我,用絕對地址就可以確保可以查找到文件。
    • 我走進了思維誤區,以為txt文件的存放方式不對,而並沒有考慮地址的問題。
  • 問題2:對於LinkedBinaryTree中的getRight()getLeft()方法,我一開始寫了兩種實現方法。但是在運行背痛診斷器的時候,有一種出現了類似無限遞歸的情況。
  • 問題2解決方案:XXXXXX
  • 問題3:背痛診斷器拋出異常
Exception in thread "main" java.lang.ClassCastException: week6.BinaryTreeNode cannot be cast to java.base/java.lang.String

無法轉換成String類型。DecisionTree類中evaluate()方法中的System.out.println (current.getRootElement());報錯。

  • 問題3解決方案:
    • 首先,我從根上查找錯誤,觀察指針類的getRootElement()操作,運用的是泛型,應該是可以轉為String型輸出的。
    • 然後,考慮背痛診斷器的測試類和DecisionTree類有無問題。因為是書上代碼,所以我又和書上的代碼校對了一遍,代碼沒有錯誤。
    • 代碼調試截圖
    • 代碼托管

      1

上周考試錯題總結

上周無錯題,優秀!

結對及互評

點評過的同學博客和代碼

  • 上周博客互評情況
    • 學號1
    • 學號2

其他

這周的代碼很復雜,不再是單單的一個類幾個方法。對於代碼的理解和實現上面還是有所不足的。對於背痛代碼的錯誤,經過兩三個小時的調試也沒有找到根本原因。
對於上學期的叠代和遞歸知識也有所忘記,應該及時溫習。對於代碼要保持高度的緊張。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 0/0 1/1 10/10
第二周 610/610 1/2 20/30
第三周 593/1230 1/3 18/48
第四周 2011/3241 2/5 30/78
第五周 956/4197 1/6 22/100
第六周 2294/6491 2/6 20/120

參考資料

20172301 《程序設計與數據結構》第六周學習總結