标签:分配 语句 ... 原理 数组实现 目标 17. position 列表
完全树:树是平衡的,且所有叶子都位于左边。
满树:n元树的所有叶子都位于同一层且每一结点要么是一片叶子要么正好具有n个孩子。
树的数组实现之计算策略:
这种计算策略是将元素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
.
树的数组实现之模拟链接策略:
数组中的每个元素都是一个结点,结点中储存了每一个孩子的索引,比如下图中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;
二叉树:二叉树是一种非常重要的数据结构,它同时具有数组和链表各自的特点:它可以像数组一样快速查找,也可以像链表一样快速添加。但是他也有自己的缺点:删除操作复杂。
二叉树的性质:
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);
- 内容充实,课本知识讲解到位。
- 对于概念的不理解能够深究,提升自己。
- 但是参考资料那一块,有点敷衍。
...
这一章树对我来说是很难的,书上的很多代码都是看不懂的。经过问同学、查资料才明白了不少。还有就是迭代器那一章之前没有看,现在看了一下。这一周虽然很多作业、但是感觉很充实。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 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 |
标签:分配 语句 ... 原理 数组实现 目标 17. position 列表
原文地址:https://www.cnblogs.com/dky-wzw/p/9853168.html