本章的內容主要講樹,顧名思義樹與隊列、棧、列表最大的區別就在於,樹是一種非線性結構,其元素是一種層次結構存放。html
樹:java
樹的數組實現:由於數組實現樹比較麻煩,因此在樹的數組實現中書上一樣模擬了連接策略,如圖所示。
node
前序遍歷:從根節點開始訪問每個節點及其孩子。如圖:git
中序遍歷:從根節點開始(注意並非先訪問根節點),中序遍歷根節點的左子樹,而後是訪問根節點,最後中序遍歷根節點的右子樹。如圖:數組
後序遍歷:從左到右先葉子後節點的方式遍歷訪問左右子樹,最後訪問根節點。如圖:數據結構
層序遍歷:從樹的第一層,也就是根節點開始訪問,從上到下逐層遍歷,在同一層中,按從左到右的順序結點逐個訪問。如圖:post
(二叉樹極其重要,以致於用三級標題來寫它,而不是通常的一個點。)二叉樹又名二元樹,它的每個結點最多具備兩個孩子結點。學習
BinaryTreeADT
其中的基本方法有:getRoot
、isEmpty
、size
、contains
、find
、toString
和一些迭代器相關的方法。暫時沒有遇到其餘的問題。測試
contains
方法時,第一次本身的代碼以下public boolean contains(T targetElement) { BinaryTreeNode current = root; BinaryTreeNode temp = root; boolean contains = false; if (current == null) { contains = false; } if (current.getElement().equals(targetElement)) { contains = true; } while (current.right != null) { if (current.right.getElement().equals(targetElement)) { contains = true; } else { current = current.right; } } while (temp.left != null) { if (temp.left.getElement().equals(targetElement)) { contains = true; } else { temp = temp.left; } } return contains; }
這致使我測試該方法時只要是在判斷非根節點就會出現程序一直運行沒法中止的狀況。設計
if(current.right.getElement().equals(taretElement)) { contains = true; break; }
和
if (temp.left.getElement().equals(targetElement)) { contains = true; break; }
後便解決了該問題。
上週沒有測試,因此沒有錯題
(本部分用於收集本章節後的生詞)
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 0/5000 | 2/2 | 8/8 | 認真學習!積極向上 |
第二週 | 812/812 | 1/3 | 22/30 | |
第三週 | 814/1626 | 1/4 | 20/50 | |
第四周 | 1386/3012 | 2/6 | 20/70 | 愉快的國慶節就要結束了... |
第五週 | 1222/3234 | 1/7 | 30/100 | |
第六週 | 1327/4561 | 2/7 | 30/100 | 啦啦啦啦啦 |
計劃學習時間:30小時
實際學習時間:30小時
改進狀況:規範commit行爲。