20172304 《程序设计与数据结构》第六周学习总结
20172304 《程序設計與數據結構》第六周學習總結
教材學習內容總結
本周主要學習的是樹的內容,樹由結點和邊組成,位于樹中較低層的結點是上一層結點的孩子。一個結點只有一個雙親,統一雙親的兩個節點稱為兄弟。沒有任何孩子的 的結點稱為葉子。一個至少有一個孩子的非根結點稱為一個內部結點。如果一個結點在從跟開始的路徑中位于另一結點之上,則該節點就是它的祖先。沿著其實子某一特定節點的路徑可以的到達的結點是該節點的子孫。
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數的數組實現之模擬鏈接策略
樹的遍歷:前序遍歷,中序遍歷,后序遍歷,層序遍歷。
| 前序遍歷 | 從根結點開始,訪問每一結點及其孩子 |
| 中序遍歷 | 從根結點開始,訪問結點的左孩子,然后是該結點,再然后是任何剩余結點。 |
| 后序遍歷 | 從根結點開始,訪問結點的孩子,然后是該結點。 |
| 層序遍歷 | 從根結點卡斯和,訪問每一層的所有結點,一次一層 |
前序遍歷
偽代碼
中序遍歷
偽代碼
層序遍歷
偽代碼
10.4 二叉樹
二叉樹基本操作方法
| getRoot | 返回指向二叉樹的引用 |
| isEmpty | 判定該樹時是否為空 |
| size | 判定樹中的元素數目 |
| contains | 判定目標是否在該樹中 |
| find | 如果找到指定元素,則返回指向其的引用 |
| toString | 返回樹的字符串表示 |
| itertorInOrder | 為樹的中序遍歷返回一個迭代器 |
| itertorPreOrder | 為樹的前序遍歷返回一個迭代器 |
| itertorPostOrder | 為樹的后續遍歷返回一個迭代器 |
| itertorLevelOrder | 為樹的層序遍歷返回一個迭代器 |
二叉樹的應用:表達式樹,背部疼痛診斷器
用鏈表實現二叉樹
教材學習中的問題和解決過程
- 問題1:在進行書上代碼測試時,發現BackPainAnalyzer測試類會報異常。如圖。
- 問題1解決方案:因為這是書上的代碼,所以請教了同學,在王志偉同學的幫助下,明白了這種調用無法調用其的子樹。只要添加代碼
然后在LinkedBinaryTree類的構造方法里加入this.left=left,this.right=right就可以了。
代碼調試中的問題和解決過程
- 問題1:在實現樹的時候發現構造的樹和實際打印的樹不一致
問題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軟件結構與數據結構
轉載于:https://www.cnblogs.com/15248252144dzx/p/9847019.html
總結
以上是生活随笔為你收集整理的20172304 《程序设计与数据结构》第六周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 互联网分布式架构--演进过程
- 下一篇: Bytomd 助记词恢复密钥体验指南