2018-2019-20172321 《Java軟件結構與數據結構》第六週學習總結

2018-2019-20172321 《Java軟件結構與數據結構》第六週學習總結

教材學習內容總結

第10章 樹

10.1概述

  • 樹由一個包含結點和邊的集構成,其中的元素被儲存在這些結點中,邊則將一個結點和另外一個結點鏈接起來。
  • 一棵樹只有一個根節點。
  • 樹是一種非線性結構,其中的元素被組織成一個層次的結構。html

  • 10.1.1樹的分類
    • 每一結點限制爲不超過n個孩子的樹稱爲一顆n元樹。結點最多具備兩個的樹稱爲二叉樹。
    • 平衡樹:若是樹的全部葉子都位於同一層或者至少是彼此相差不超過一個層,就稱之爲是平衡的。

    • 徹底樹:若是某樹是平衡的,且底層全部葉子都位於shu的左邊,則認爲該樹是徹底的。

    • 滿樹:若是一顆n元樹的全部葉子都位於同一層且每一結點要麼是一片葉子要麼正好具備n個孩子,則稱次樹是滿的。

10.2實現樹的策略

  • 10.2.1樹的數組實現之計算策略
    • 左孩子存儲在(2n+1)處,右孩子存儲在(2(n+1))處
    • 左孩子存儲在(2n+1)處,右孩子存儲在(2(n+1))處
  • 10.2.2樹的數組實現之計算策略
  • 10.2.3樹的分析
    • 通常而言,一棵含有m個元素的平衡n元樹具備的高度爲lognm

10.3樹的遍歷

  • 前序遍歷:從根節點開始,訪問每一結點及其孩子
  • 中序遍歷從根節點開始,訪問結點的左孩子,而後是該結點,再而後是任何剩餘結點
  • 後序遍歷:從根節點開始,訪問結點的孩子,而後是該結點
  • 層序遍歷:從根節點開始,訪問每一層的全部結點,一次一層

  • 10.3.1前序遍歷
    • A——B——D——E——C——F
  • 10.3.2中序遍歷
    • D——B——E——A——F——C
  • 10.3.3後序遍歷
    • D——E——B——F——C——A
  • 10.3.4層序遍歷
    • A——B——C——D——E——F

10.4二叉樹

  • 二叉樹的操做
public interface BinaryTreeADT<T> 
{
    //返回指向二叉樹的引用
    public T getRootElement();
    //判斷該樹是否爲空
    public boolean isEmpty();
    //判斷樹中的元素數目
    public int size();
    //判斷目標是否在該樹中
    public boolean contains(T targetElement);
    //若是找到指定元素,則返回指向其的引用
    public T find(T targetElement);
    //返回樹的字符串表示
    public String toString();
    //返回一個迭代器
    public Iterator<T> iterator();
    //爲數的中序遍歷返回一個迭代器
    public Iterator<T> iteratorInOrder();
    //爲數的前序遍歷返回一個迭代器
    public Iterator<T> iteratorPreOrder();
    //爲數的後序遍歷返回一個迭代器
    public Iterator<T> iteratorPostOrder();
    //爲數的層序遍歷返回一個迭代器
    public Iterator<T> iteratorLevelOrder();
}

10.5使用二叉樹:表達式樹

  • 算法思想:
    • 依次讀取字符。
    • 若是該符號是操做數,建立操做數結點而且入棧。
    • 若是該符號爲操做符,把棧頂T一、T2相繼出棧,建立操做符結點,操做符結點的左右孩子分別爲T一、T2,最後把操做符結點入棧。

10.7用鏈表實現二叉樹

線性結構和非線性結構

  • 線性結構是一個有序數據元素的集合。 其中數據元素之間的關係是一對一的關係,即除了第一個和最後一個數據元素以外,其它數據元素都是首尾相接的。
    經常使用的線性結構有:線性表,棧,隊列,雙隊列,數組,串。
  • 非線性結構中各個數據元素再也不保持在一個線性序列中,每一個數據元素可能與零個或者多個其餘數據元素髮生聯繫。根據關係的不一樣,可分爲層次結構和羣結構。
    常見的非線性結構有:二維數組,多維數組,廣義表,樹(二叉樹等),圖。(其中多維數組是由多個一維數組組成的,因此再也不是線性結構)

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

  • 問題1:問題2:滿二叉樹和徹底二叉樹,概念太扯了吧,不懂在說啥
  • 問題1解決方案:聽王老師講課大概有點感受。
    • 滿二叉樹——除了葉結點外每個結點都有左右子葉且葉子結點都處在最底層的二叉樹。
    • 徹底二叉樹——若設二叉樹的高度爲h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第h層有葉子結點,而且葉子結點都是從左到右依次排布,這就是徹底二叉樹。
    • 滿二叉樹必定是徹底二叉樹,徹底二叉樹不必定是滿二叉樹。
  • 問題2對於樹的度,節點的度,樹的高度,深度以及節點的層次概念不清楚
  • 問題2解決方案:
    • 節點的度分爲0,1,2.及表示節點所含的分支個數,上圖中3 的度是 2,10 的度是 1。
    • 樹的度分爲0,1,2即表示一棵樹中最大節點的度,即哪一個節點的子節點最多,它的度就是樹的度,上圖中樹的度爲 2。
    • 樹的高度,即從葉子節點開始,自底向上增長。
    • 樹的深度與樹的高度相反,從根節點向下增長。好比上圖中的 6 ,高度是 2 ,深度是 3。

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

第一次我寫了測試,出現了這個恐怖的東西,可是我立刻意識到了確定是我Alt+Enter的時候點到了沒有修改過的例題那個類裏面,那裏的全部方法都是return null或者0的java

可是再修改運行以後又是這樣git

以後我本身改了哪些我都不知道了,而後竟然就能夠了???能夠了??以了?了。算法

代碼託管

上週考試錯題總結

沒有測試數組

結對及互評

  • [20172324曾程](http://www.cnblogs.com/amberR/p/9670328.html
  • 博客中值得學習的或問題:
    • 內容詳略得當;
    • 代碼調試環節比較詳細;
  • 基於評分標準,我給本博客打分:14分。得分狀況以下:
    • 正確使用Markdown語法(加1分)
    • 模板中的要素齊全(加1分)
    • 教材學習中的問題和解決過程, 加4分
    • 代碼調試中的問題和解決過程, 加4分
    • 本週有效代碼超過300分行,加2分
    • 其餘加分,加2分
    • 排版精美的加一分
    • 進度條中記錄學習時間與改進狀況的加1分

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一週 0/0 1/1 8/8
第二週 671/671 1/2 17/25
第三週 345/1016 1/3 15/40
第四周 405/1421 2/5 23/63
第五週 1202/2623 1/5 20/83
第六週 1741/4364 1/6 20/103

參考資料

相關文章
相關標籤/搜索