20182305 2019-2020-1 《數據結構與面向對象程序設計》第九周學習總結

20182305 2019-2020-1 《數據結構與面向對象程序設計》第九周學習總結

教材學習內容總結

這一週的學習內容爲教材第十6、七章,主要就是和樹有關的內容java

  • 樹。git

    • 樹就是字面意思,像樹同樣發展壯大的一種儲存數據的結構,由最開始的一個數據(樹根)分叉出來,愈來愈多。
    • 樹根:位於樹頂層的節點。
    • 雙親和孩子:一個節點相連的下一層節點成爲這個節點的孩子。這個節點稱爲他孩子的雙親。
    • 兄弟:雙親相同的節點互相稱爲兄弟。
    • 葉子:沒有孩子的節點。
    • 深度:樹的層數。
    • 階:節點的階就是這個節點的孩子數;樹的階數是整個樹中,階數最大的節點的階。
  • 二叉樹:每一個節點最多有兩個孩子。若是每一個節點都有兩個孩子,這個樹叫徹底二叉樹。編程

  • 樹的實現:數組

    • 數組實現:使用數組實現樹,數組下標爲n的結點的左子樹下標爲2n,右子樹下標爲2n+1。
    • 鏈表實現:鏈表是最多見的造樹方法,二叉鏈表可鏈接左右節點,三叉鏈表可指向父節點。是比較經常使用的實現樹的方法。
  • 樹的遍歷:遞歸遍歷比非遞歸遍歷更簡單,參照一個順序的遍歷能夠寫出其餘順序的遍歷。數據結構

前序遍歷:先根節點,再左子樹,最後右子樹學習

中序遍歷:先左子樹,再根節點,最後右子樹設計

後序遍歷:先左子樹,再右子樹,最後根節點3d

遞歸遍歷和非遞歸遍歷代碼指針

  • 二叉樹查找:關鍵點在於以一個根節點爲準,左側都是比它小,右側都它大於等於它。查找時,就從頭挨個比較,小就往左子樹找,大就往右子樹找。

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

  • 問題一:使用樹進行存儲數據時,怎麼樣設定區分標準,將新的數據存入左子樹仍是右子樹,會更有利於存儲和後續查找取出使用。如何提升效率。
  • 問題一解決辦法:例如經常使用的儲存和查找。在儲存時設定一個根,就以這個根做爲標準進行比較。比他小遞歸方法進入左子樹去繼續比較,比他大就右子樹處理。可是儲存結束後會出現,這個樹不平衡,某一側數據特別多,致使這顆樹失去平衡。就須要對這個樹進行旋轉。調試

  • 問題二:樹在使用中,遍歷方法如何使用,到底是遞歸更好、仍是非遞歸更好。
  • 問題二解決方法:從代碼效率來講,確定是遞歸方法更好,由於遞歸方法簡潔,效率高,也節約代碼行數。可是不容易想,也須要嚴格設置遞歸循環終止的條件。不然極易出錯。

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

  • 問題一:左子樹沒法於根節點鏈接。在設置root.left = temp;時,編譯沒有任何報錯,可是運行時會出現空指針異常。提示在打印root的內容處。單步調試發現是在這一句root.left指向temp時沒法正常指向。
  • 問題一解決方法:使用方法重寫換了一個定義方法,在定義上一級節點時,直接將左右子節點定義上去。並更改思路,先定義最底層節點,從最下方往上定義、連接。

代碼託管

上週考試錯題總結











其餘(感悟、思考等, 可選)

仍是要提升效率啊,這樣可不行。
這樣下去,期末的其餘科目但是難以保證。
仍是要增長理解,提升效率。既是提升代碼效率也是提升本身的效率。
加油吧,堅持下去,快放假了。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 6000行 30篇 400小時
第一週 200/200 2/2 17/17
第2、三週 556/756 3/5 31/48 明白了類與方法的關係,對Java編程的思想的瞭解有了一些進步
第四周 673/1429 2/7 12/60 對兩段代碼之間的關係瞭解了一些
第五週 1308/2737 2/9 25/85
第六週 800/3537 2/11 18/103
第七週 4195/7732 2/13 27/130
第八週 489/8221 1/14 6/136
第九周 2893/11114 3/17 30/166
  • 計劃學習時間:20小時

  • 實際學習時間:30小時

  • 改進狀況:原本想多分一些時間給其餘科目,結果這段時間裏的課程難度實在是……一言難盡。讓我不得不拿出更多時間來學Java。但願下週的時間能多一些空閒,讓我學一下其餘科目,我不想掛科!!!!!(Wa的一聲)

相關文章
相關標籤/搜索