课程:《程序设计与数据结构》
班级: 1823
姓名: 张子正
学号:20182304
实验教师:王志强
实验日期:2019年11月11日
必修/选修: 必修
tostring
十分复杂,编程时造成了很大困扰。
2.在实验一的基础上,加入能够从上到下构造二叉树的方法即可解决
3.决策树的实现是不难的,上交书上例题后,将相应字符串做一个简单的修改就可以了
4.如果不使用树来做,那么思路是不难的。我也尝试在网上寻找使用树解决的方法,却与我自己的代码结合不起来,频频报错,最终只能放弃
toString
方法,toString
方法要考虑多种情况,实现很复杂
@Override
public String toString() {
return "LinkedBinaryTree{" +
"root=" + root +
'}';
}
- 修改后:
public String toString2() {
UnorderedListADT<BinaryTreeNode<T>> nodes =
new ArrayUnorderedList<BinaryTreeNode<T>>();
UnorderedListADT<Integer> levelList =
new ArrayUnorderedList<Integer>();
BinaryTreeNode<T> current;
String result = "";
int printDepth = this.getHeight();
int possibleNodes = (int) Math.pow(2, printDepth + 1); // 最多的结点数 + 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;
}
- 最后对书上的代码进行了大改,程序才能正常运行。这让我意识到教材中也存在着问题。这是类和代码已经空前复杂,明显可以看出实践难度大大增强了,需要求助同学和网络才能解决问题。
问题2:给出遍历后序中序,如何确定一棵树?
迭代器简介(Iterator)
- 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。Java中的Iterator功能比较简单,并且只能单向移动:
- (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
- (2) 使用next()获得序列中的下一个元素。
- (3) 使用hasNext()检查序列中是否还有元素。
- (4) 使用remove()将迭代器新返回的元素删除。
- Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
二叉树的实现对我们的编程能力提出了极大的考验,如果我们单凭自己解决不了问题,就需要学着理解网络上的代码,并试着将它修改成合适的形式,使其能够在我们电脑上运行
...
# 20182304 实验八 《数据结构与面向对象程序设计》实验报告
原文:https://www.cnblogs.com/acgacg/p/11879135.html