20172327 2018-2019-1 《程序設計與數據結構》第六週學習總結

20172327 2018-2019-1 《程序設計與數據結構》第六週學習總結

教材學習內容總結

第十章 樹

概述


1.樹是一種非線性結構,其元素被組織成一個層次結構。

2.樹由一個包含結點和邊的集構成,元素被儲存在結點中,邊將一個結點和另外一個結點鏈接起來。

3.每一個結點都在一個特定層,根是位於該樹頂層的惟一結點。

4.樹中較低層的結點是上層結點的孩子,由同一個上層結點產生的多個結點互相稱爲兄弟,沒有任何孩子的結點被稱爲葉子,至少有一個孩子的結點被稱爲內部結點。

5.經過計算根到結點所必須通過的邊數目,就能夠肯定其路徑長度。

6.樹的高度是指從根到葉子最遠的路徑長度。

7.樹中任一結點能夠具備的最大孩子數目被稱爲度,孩子數目無限制的樹稱爲廣義樹,每一個結點限制不超過n個孩子的樹稱爲n元樹。

8.結點具備兩個孩子的樹稱爲二叉樹。

9.平衡樹:葉子都位於同一層或相差不超過一層的樹稱爲平衡樹。

10.M個元素的n元樹具備的高度爲lognM,一棵含有個結點的平衡二叉樹具備的高度爲log2N。

11.徹底樹:底層全部的葉子都靠左邊排列的平衡樹。
滿樹:葉子都位於同一層,且每個結點要麼是葉子,要麼是正好具備n個孩子。

12.樹的基本術語:

實現樹的策略


1.樹的數組實現之計算策略:
對於任何儲存在數組位置n處的元素而言,左孩子放在2n+1處,右孩子放在2(n+1)處.


2.樹的數組實現之模擬連接策略:
按照先來先服務的基準連續分配數組位置,每個結點存儲的是每個孩子(可能還有雙親)的數組索引。不過這種方式增長了刪除的成本。
html


3.樹的分析:
在n相對較小時,相對於樹所涉及的成本,樹實現和線性結構之間並不存在特別顯著的差異,可是,隨着n的增長,樹的效率就會愈加引人注意。node

樹的遍歷


1.前序遍歷:從根結點開始,訪問每一個子結點及其孩子。


2.中序遍歷:從根結點開始,訪問結點的左孩子,而後時該結點,再而後時任何剩餘結點。
git


3.後序遍歷:從根結點開始,訪問結點的孩子,而後是該結點。
數組


4.層序遍歷:從根結點開始,訪問每一層的全部結點,一次一層。
數據結構


5.二叉樹的遍歷:二叉樹的遍歷是指從根節點出發,按照某種次序依次訪問二叉樹中全部結點,使得每一個結點被訪問一次且僅被訪問一次。二叉樹的遍歷方式有不少,主要有前序遍歷,中序遍歷,後序遍歷。學習

  • 前序遍歷
      前序遍歷的規則是:若二叉樹爲空,則空操做返回,不然先訪問根節點,而後前序遍歷左子樹,再前序遍歷右子樹
    測試

  • 中序遍歷
      中序遍歷的規則是:若樹爲空,則空操做返回;不然從根節點開始(注意並非先訪問根節點),中序遍歷根節點的左子樹,而後是訪問根節點,最後中序遍歷右子樹。能夠看到,若是是二叉排序樹,中序遍歷的結果就是個有序序列。
    .net

  • 後序遍歷
      後序遍歷的規則是:若樹爲空,則空操做返回;而後先遍歷左子樹,再遍歷右子樹,最後訪問根結點,在遍歷左、右子樹時,仍然先遍歷左子樹,而後遍歷右子樹,最後遍歷根結點。
    設計

二叉樹


1.二叉樹是樹的特殊一種,具備以下特色:一、每一個結點最多有兩顆子樹,結點的度最大爲2。二、左子樹和右子樹是有順序的,次序不能顛倒。三、即便某結點只有一個子樹,也要區分左右子樹。

2.滿二叉樹(完美二叉樹Perfect Binary Tree)

A Perfect Binary Tree(PBT) is a tree with all leaf nodes at the same depth. 
All internal nodes have degree 2.

一個深度爲k(>=-1)且有2^(k+1) - 1個結點的二叉樹稱爲完美二叉樹。
3d


3.徹底二叉樹(Complete Binary Tree)

A Complete Binary Tree (CBT) is a binary tree in which every level, 
except possibly the last, is completely filled, and all nodes 
are as far left as possible.

徹底二叉樹從根結點到倒數第二層知足完美二叉樹,最後一層能夠不徹底填充,其葉子結點都靠左對齊。


4.完滿二叉樹(Full Binary Tree)

A Full Binary Tree (FBT) is a tree in which every node other than the leaves has two children.

換句話說,全部非葉子結點的度都是2。(只要你有孩子,你就必然是有兩個孩子。)
注:Full Binary Tree又叫作Strictly Binary Tree。

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

  • 問題1:樹的徹底性是什麼?
  • 解決方案:徹底樹從根結點到倒數第二層知足滿樹,最後一層能夠不徹底填充,其葉子結點都靠左對齊。滿樹必定是一棵徹底樹。
  • 問題2:樹的度,節點的度,樹的高度,深度以及節點的層次有什麼區別?
  • 解決方案:
    1.節點的度分爲0,1,2.及表示節點所含的分支個數。
    2.樹的度分爲0,1,2即表示一棵樹中最大節點的度,即哪一個節點的子節點最多,它的度就是樹的度。
    3.樹的高度,即從葉子節點開始,自底向上增長。
    4.樹的深度與樹的高度相反,從根節點向下增長。

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

  • 問題1:在實現ArrayOrderedListTest測試時,我遇到了顯示最後一個數字時,人家顯示爲null這個問題。
    圖片
  • 解決分析,在我對前面ArrayList類檢查時,發現我在顯示last時,將rear-1不當心寫成rear了,因此它所讀取的是最後一個後邊的,因此確定爲空。

代碼託管

結對及互評

正確使用Markdown語法(加1分)
模板中的要素齊全(加1分)
教材學習中的問題和解決過程, (加3分)
代碼調試中的問題和解決過程, 無問題
感想,體會真切的(加1分)
點評認真,能指出博客和代碼中的問題的(加1分)

  • 20172317
    基於評分標準,我給以上博客打分:4分。得分狀況以下:
  • 20172320
    基於評分標準,我給以上博客打分:8分。得分狀況以下:

    • 結對學習內容
      • 教材第10章,運行教材上的代碼
      • 完成課後自測題,並參考答案學習
      • 完成程序設計項目:至少完成PP10.一、PP10.三、PP10.5

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

這周學的有點麻煩,棧還行,就是鏈表有點糊塗。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 8/8
第二週 1306/1306 1/2 20/28
第三週 1291/2597 1/3 18/46
第四周 4361/6958 2/3 20/66
第五週 1755/8713 1/6 20/86
第六週 3349/12062 1/7 20/106

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

  • 計劃學習時間:10小時

  • 實際學習時間:8小時

  • 改進狀況:

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

參考資料

相關文章
相關標籤/搜索