本週主要學習的是樹的內容,樹由結點和邊組成,位於樹中較低層的結點是上一層結點的孩子。一個結點只有一個雙親,統一雙親的兩個節點稱爲兄弟。沒有任何孩子的 的結點稱爲葉子。一個至少有一個孩子的非根結點稱爲一個內部結點。若是一個結點在從跟開始的路徑中位於另外一結點之上,則該節點就是它的祖先。沿着其實子某一特定節點的路徑能夠的到達的結點是該節點的子孫。
10.1.1樹的分類
樹中任一結點能夠具備的最大孩子數目交租該樹的度。對結點所含有的孩子數目無限制的數稱爲廣義樹。咱們將每一節點先只爲不超過n個孩子的樹稱爲一棵n元樹。節點最多具備兩個孩子的樹稱爲二叉樹。若是一個樹的全部葉子都位於同一層或者至少彼此相差不超過一個層就稱之是平衡的。一棵含有m個結點的平衡n元樹具備的高度爲lognm。
徹底樹:若是某樹是平衡的,且全部葉子都位於樹的左邊,則認爲樹是徹底的。徹底樹在每一個k層上都具備2^k個結點。
滿樹:若是一棵n、元樹的全部葉子都位於同一層且沒一結點要麼是一篇葉子要麼正好具備n個孩子,則稱樹是滿的。
10.2實現樹的策略
10.2.1樹的數組實現值計算策略。
使用數組來儲存一棵樹:對於任何儲存在數組位置n處的元素而言,該元素的左孩子將儲存在位置2n+1處,該元素的右孩子則儲存在位置(2×n+1)處。
10.2.2數的數組實現之模擬連接策略
樹的遍歷:前序遍歷,中序遍歷,後序遍歷,層序遍歷。php
名稱 | 內容 |
---|---|
前序遍歷 | 從根結點開始,訪問每一結點及其孩子 |
中序遍歷 | 從根結點開始,訪問結點的左孩子,而後是該結點,再而後是任何剩餘結點。 |
後序遍歷 | 從根結點開始,訪問結點的孩子,而後是該結點。 |
層序遍歷 | 從根結點卡斯和,訪問每一層的全部結點,一次一層 |
前序遍歷
僞代碼html
Visit node Traverse(left child) Traverse(right child)
中序遍歷
僞代碼java
Traverse(left child) Visit node Traverse(right child)
層序遍歷
僞代碼node
Create a queue called nodes Create an unordered list called results Enqueue the root onto the nodes queue While the root onto the nodes queue While the nodes queue is not empty { Dequeue the first element from the queue If that element is not null Add that element to the rear of the results list Enqueue the children of the element Else Add null on the result list } Return an iterator for the result list
10.4 二叉樹
二叉樹基本操做方法git
操做 | 說明 |
---|---|
getRoot | 返回指向二叉樹的引用 |
isEmpty | 斷定該樹時是否爲空 |
size | 斷定樹中的元素數目 |
contains | 斷定目標是否在該樹中 |
find | 若是找到指定元素,則返回指向其的引用 |
toString | 返回樹的字符串表示 |
itertorInOrder | 爲樹的中序遍歷返回一個迭代器 |
itertorPreOrder | 爲樹的前序遍歷返回一個迭代器 |
itertorPostOrder | 爲樹的後續遍歷返回一個迭代器 |
itertorLevelOrder | 爲樹的層序遍歷返回一個迭代器 |
二叉樹的應用:表達式樹,背部疼痛診斷器
用鏈表實現二叉樹web
LinkedBinaryTree left,right
而後在LinkedBinaryTree類的構造方法里加入this.left=left,this.right=right就能夠了。數組
問題1解決方案:而後發現是在調用方法時用錯了對象,將應該調用樹的位置錯用了其子樹的對象。數據結構
(statistics.sh腳本的運行結果截圖)學習
-錯題一
-問題解答:這道題錯的緣由是我錯將書上的查找的時間複雜度錯認爲二叉樹的時間複雜度。列表的時間複雜度是與查找方法有關的,可是二叉樹的查找必需要遍歷每一個元素。因此時間複雜度應該是O(n)。測試
錯誤三
-問題解答:中序遍歷從根節點開始,訪問結點的左孩子,而後是該結點,再而後是任何剩餘結點。
20172304郭愷郭愷同窗的博客依然是一如既往的優秀,既將教材中的內容總結的詳略得當,還能具體而全面的對本身的錯誤進行總結和提高。
20172328李馨雨理性與同窗的博客仍是很認真的。
上週博客互評狀況
20172304郭愷同窗本次的博客十分優秀,對教材的總結詳略得當,而又針對本身在教材中發現的問題進行了深刻的鞭辟入裏的思考與解答。整個過程看起來賞心悅目給人一種美的享受。
20172328李馨雨同窗的博客十分的完整與豐富,體現了她認真的學習態度。
本週通過了學習瞭解了樹的相關知識,樹與其說是一種數據結構更不如說是邏輯結構。他是創建在基礎數據結構之上的,好比數組,棧,或者鏈表。合抱之木,生於毫末;九層之臺,起於累土;千里之行,始於足下。只有通過充分的積累。充分學習了基礎的數據結構,才能作出跟多優秀的代碼。才能更好的建設中國特點社會主義。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 30/30 | 1/1 | 10/10 | |
第二週 | 766/796 | 1/2 | 40/50 | |
第三週 | 817/1613 | 1/3 | 20/70 | |
第四周 | 1370/3983 | 2/5 | 30/100 | |
第五週 | 1235/5214 | 1/6 | 10/110 | |
第六週 | 1328/6542 | 1/7 | 20/130 |
1.藍墨雲班課
2.java軟件結構與數據結構