彻底树:树是平衡的,且全部叶子都位于左边。
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 |