20172304 《程序设计与数据结构》第六周学习总结
20172304 《程序設(shè)計與數(shù)據(jù)結(jié)構(gòu)》第六周學(xué)習(xí)總結(jié)
教材學(xué)習(xí)內(nèi)容總結(jié)
本周主要學(xué)習(xí)的是樹的內(nèi)容,樹由結(jié)點和邊組成,位于樹中較低層的結(jié)點是上一層結(jié)點的孩子。一個結(jié)點只有一個雙親,統(tǒng)一雙親的兩個節(jié)點稱為兄弟。沒有任何孩子的 的結(jié)點稱為葉子。一個至少有一個孩子的非根結(jié)點稱為一個內(nèi)部結(jié)點。如果一個結(jié)點在從跟開始的路徑中位于另一結(jié)點之上,則該節(jié)點就是它的祖先。沿著其實子某一特定節(jié)點的路徑可以的到達的結(jié)點是該節(jié)點的子孫。
10.1.1樹的分類
樹中任一結(jié)點可以具有的最大孩子數(shù)目交租該樹的度。對結(jié)點所含有的孩子數(shù)目無限制的數(shù)稱為廣義樹。我們將每一節(jié)點先只為不超過n個孩子的樹稱為一棵n元樹。節(jié)點最多具有兩個孩子的樹稱為二叉樹。如果一個樹的所有葉子都位于同一層或者至少彼此相差不超過一個層就稱之是平衡的。一棵含有m個結(jié)點的平衡n元樹具有的高度為lognm。
完全樹:如果某樹是平衡的,且所有葉子都位于樹的左邊,則認(rèn)為樹是完全的。完全樹在每個k層上都具有2^k個結(jié)點。
滿樹:如果一棵n、元樹的所有葉子都位于同一層且沒一結(jié)點要么是一篇葉子要么正好具有n個孩子,則稱樹是滿的。
10.2實現(xiàn)樹的策略
10.2.1樹的數(shù)組實現(xiàn)值計算策略。
使用數(shù)組來儲存一棵樹:對于任何儲存在數(shù)組位置n處的元素而言,該元素的左孩子將儲存在位置2n+1處,該元素的右孩子則儲存在位置(2×n+1)處。
10.2.2數(shù)的數(shù)組實現(xiàn)之模擬鏈接策略
樹的遍歷:前序遍歷,中序遍歷,后序遍歷,層序遍歷。
| 前序遍歷 | 從根結(jié)點開始,訪問每一結(jié)點及其孩子 |
| 中序遍歷 | 從根結(jié)點開始,訪問結(jié)點的左孩子,然后是該結(jié)點,再然后是任何剩余結(jié)點。 |
| 后序遍歷 | 從根結(jié)點開始,訪問結(jié)點的孩子,然后是該結(jié)點。 |
| 層序遍歷 | 從根結(jié)點卡斯和,訪問每一層的所有結(jié)點,一次一層 |
前序遍歷
偽代碼
中序遍歷
偽代碼
層序遍歷
偽代碼
10.4 二叉樹
二叉樹基本操作方法
| getRoot | 返回指向二叉樹的引用 |
| isEmpty | 判定該樹時是否為空 |
| size | 判定樹中的元素數(shù)目 |
| contains | 判定目標(biāo)是否在該樹中 |
| find | 如果找到指定元素,則返回指向其的引用 |
| toString | 返回樹的字符串表示 |
| itertorInOrder | 為樹的中序遍歷返回一個迭代器 |
| itertorPreOrder | 為樹的前序遍歷返回一個迭代器 |
| itertorPostOrder | 為樹的后續(xù)遍歷返回一個迭代器 |
| itertorLevelOrder | 為樹的層序遍歷返回一個迭代器 |
二叉樹的應(yīng)用:表達式樹,背部疼痛診斷器
用鏈表實現(xiàn)二叉樹
教材學(xué)習(xí)中的問題和解決過程
- 問題1:在進行書上代碼測試時,發(fā)現(xiàn)BackPainAnalyzer測試類會報異常。如圖。
- 問題1解決方案:因為這是書上的代碼,所以請教了同學(xué),在王志偉同學(xué)的幫助下,明白了這種調(diào)用無法調(diào)用其的子樹。只要添加代碼
然后在LinkedBinaryTree類的構(gòu)造方法里加入this.left=left,this.right=right就可以了。
代碼調(diào)試中的問題和解決過程
- 問題1:在實現(xiàn)樹的時候發(fā)現(xiàn)構(gòu)造的樹和實際打印的樹不一致
問題1解決方案:然后發(fā)現(xiàn)是在調(diào)用方法時用錯了對象,將應(yīng)該調(diào)用樹的位置錯用了其子樹的對象。
錯題總結(jié)
代碼托管
(statistics.sh腳本的運行結(jié)果截圖)
上周考試錯題總結(jié)
-錯題一
-問題解答:這道題錯的原因是我錯將書上的查找的時間復(fù)雜度錯認(rèn)為二叉樹的時間復(fù)雜度。列表的時間復(fù)雜度是與查找方法有關(guān)的,但是二叉樹的查找必須要遍歷每個元素。所以時間復(fù)雜度應(yīng)該是O(n)。
- 錯誤二
-問題解答:錯將不能連續(xù)分配看成了能夠連續(xù)分配。 錯誤三
-問題解答:中序遍歷從根節(jié)點開始,訪問結(jié)點的左孩子,然后是該結(jié)點,再然后是任何剩余結(jié)點。博客互評
20172304郭愷郭愷同學(xué)的博客依然是一如既往的優(yōu)秀,既將教材中的內(nèi)容總結(jié)的詳略得當(dāng),還能具體而全面的對自己的錯誤進行總結(jié)和提升。
20172328李馨雨理性與同學(xué)的博客還是很認(rèn)真的。點評過的同學(xué)博客和代碼
上周博客互評情況
20172304郭愷同學(xué)本次的博客十分優(yōu)秀,對教材的總結(jié)詳略得當(dāng),而又針對自己在教材中發(fā)現(xiàn)的問題進行了深入的鞭辟入里的思考與解答。整個過程看起來賞心悅目給人一種美的享受。
20172328李馨雨同學(xué)的博客十分的完整與豐富,體現(xiàn)了她認(rèn)真的學(xué)習(xí)態(tài)度。其他(感悟、思考等,可選)
本周經(jīng)過了學(xué)習(xí)了解了樹的相關(guān)知識,樹與其說是一種數(shù)據(jù)結(jié)構(gòu)更不如說是邏輯結(jié)構(gòu)。他是建立在基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)之上的,比如數(shù)組,棧,或者鏈表。合抱之木,生于毫末;九層之臺,起于累土;千里之行,始于足下。只有經(jīng)過充分的積累。充分學(xué)習(xí)了基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),才能做出跟多優(yōu)秀的代碼。才能更好的建設(shè)中國特色社會主義。
學(xué)習(xí)進度條
| 目標(biāo) | 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軟件結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)
轉(zhuǎn)載于:https://www.cnblogs.com/15248252144dzx/p/9847019.html
總結(jié)
以上是生活随笔為你收集整理的20172304 《程序设计与数据结构》第六周学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 互联网分布式架构--演进过程
- 下一篇: Bytomd 助记词恢复密钥体验指南