徹底樹:樹是平衡的,且全部葉子都位於左邊。
html
滿樹:n元樹的全部葉子都位於同一層且每一結點要麼是一片葉子要麼正好具備n個孩子。
java
樹的數組實現之計算策略:node
這種計算策略是將元素n的左孩子放置於`2n+ 1`、右孩子放置於`2n+2`.其中,n是其雙親的索引。舉個例子:
A的索引爲0,B爲A的左孩子,因此它在數組中的位置在2*0+1=1
,因此B在數組中的位置在索引爲1的位置。D爲B的左孩子,B的索引爲1,因此D的索引爲2*1+1=3
.git
樹的數組實現之模擬連接策略:數組
數組中的每一個元素都是一個結點,結點中儲存了每個孩子的索引,好比下圖中A的孩子有兩個B與C,他們的索引分別是2和1,所以2和1就被儲存在了A中。
安全
Visit node; Traverse(left child); Traverse(right child);
Traverse(left child); Visit node; Traverse(right child);
Traverse(left child); Traverse(right child); Visit node;
二叉樹:二叉樹是一種很是重要的數據結構,它同時具備數組和鏈表各自的特色:它能夠像數組同樣快速查找,也能夠像鏈表同樣快速添加。可是他也有本身的缺點:刪除操做複雜。markdown
二叉樹的性質:數據結構
BinaryTreeNodeless
public String printTree() //打印樹的代碼。 { UnorderedListADT<BinaryTreeNode<ExpressionTreeOp>> nodes = new UnorderedListArrayList<BinaryTreeNode<ExpressionTreeOp>>();//定義一個列表,用來裝結點。 UnorderedListADT<Integer> levelList = new UnorderedListArrayList<Integer>();//定義一個列表用來裝結點的層級。 BinaryTreeNode<ExpressionTreeOp> current; String result = ""; int printDepth = this.getHeight(); int possibleNodes = (int)Math.pow(2, printDepth + 1); int countNodes = 0; nodes.addToRear(root); Integer currentLevel = 0; Integer previousLevel = -1; levelList.addToRear(currentLevel); while (countNodes < possibleNodes) { countNodes = countNodes + 1; current = nodes.removefirst(); currentLevel = levelList.removefirst(); if (currentLevel > previousLevel) { result = result + "\n\n"; previousLevel = currentLevel; for (int j = 0; j < ((Math.pow(2, (printDepth - currentLevel))) - 1); j++) result = result + " "; } else { for (int i = 0; i < ((Math.pow(2, (printDepth - currentLevel + 1)) - 1)) ; i++) { result = result + " "; } } if (current != null) { result = result + (current.getElement()).toString(); nodes.addToRear(current.getLeft()); levelList.addToRear(currentLevel + 1); nodes.addToRear(current.getRight()); levelList.addToRear(currentLevel + 1); } else { nodes.addToRear(null); levelList.addToRear(currentLevel + 1); nodes.addToRear(null); levelList.addToRear(currentLevel + 1); result = result + " "; } } return result; }
package java.util; public interface Iterator<E> { boolean hasNext();//判斷是否存在下一個對象元素 E next();//獲取下一個元素 void remove();//移除元素 }
Package java.lang; import java.util.Iterator; public interface Iterable<T> { Iterator<T> iterator(); }
Iterator<Book> itr = myList.iterator(); while(ite.hasnext()); System.out.println(itr.next());還能夠用for——each循環實現:
java for(Book book:myList)//這兩種方法是同樣的。 System.out.println(book);
Exception in thread "main" java.lang.ClassCastException: java.base/java.lang.Integer cannot be cast to second_term.tenth_chapter.ExpressionTree
UnorderedListADT<BinaryTreeNode<ExpressionTree>> nodes = new UnorderedListArrayList<BinaryTreeNode<ExpressionTree>>(); UnorderedListADT<Integer> levelList = new UnorderedListArrayList<Integer>(); BinaryTreeNode<ExpressionTree> current;
裏面應該用泛型:因此把Expressiontree改成T就OK了。
運行截圖爲:
post
- 內容充實,課本知識講解到位。 - 對於概念的不理解可以深究,提高本身。 - 可是參考資料那一塊,有點敷衍。
- [20172310](http://www.cnblogs.com/Qiuxia2017/) - 結對學習內容 - 第十章:樹 - 第七章:迭代器;
這一章樹對我來講是很難的,書上的不少代碼都是看不懂的。通過問同窗、查資料才明白了很多。還有就是迭代器那一章以前沒有看,如今看了一下。這一週雖然不少做業、可是感受很充實。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 260/0 | 1/1 | 05/05 | |
第二週 | 300/560 | 1/2 | 13/18 | |
第三週 | 212/772 | 1/4 | 21/39 | |
第四周 | 330/1112 | 2/7 | 21/60 | |
第五週 | 1321/2433 | 1/8 | 30/90 | |
第六週 | 1024/3457 | 1/9 | 20/110 |