标签:后序遍历 stat iterator expr 初始化 自己实现 错误 方法 表达
课程:《程序设计与数据结构》
班级: 1823
姓名:赵天昊
学号:20182327
实验教师:王志强
实验日期:2019年11月7日
必修/选修: 必修
用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台
用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台
提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台
提交测试代码运行截图,要全屏,包含自己的学号信息
实验一:
import java.util.Iterator;
public class LinkedBinaryTreeTest {
public static void main(String[] args) {
LinkedBinaryTree linkedBinaryTree2 = new LinkedBinaryTree(20);
LinkedBinaryTree linkedBinaryTree6 = new LinkedBinaryTree();
LinkedBinaryTree linkedBinaryTree1 = new LinkedBinaryTree(18, linkedBinaryTree6, linkedBinaryTree2);
LinkedBinaryTree linkedBinaryTree4 = new LinkedBinaryTree(23);
LinkedBinaryTree linkedBinaryTree5 = new LinkedBinaryTree(27);
LinkedBinaryTree linkedBinaryTree3 = new LinkedBinaryTree(152, linkedBinaryTree5, linkedBinaryTree4);
LinkedBinaryTree linkedBinaryTree = new LinkedBinaryTree(460, linkedBinaryTree1, linkedBinaryTree3);
Iterator preTree = linkedBinaryTree.iteratorPreOrder();
Iterator postTree = linkedBinaryTree.iteratorPostOrder();
System.out.println("输出树");
System.out.println(linkedBinaryTree.toString());
System.out.println("输出树根的右子树" + linkedBinaryTree.getRight());
System.out.println(("输出根的左子树" + linkedBinaryTree.getLeft()));
System.out.println(("输出树的深度" + linkedBinaryTree.getHeight()));
System.out.println("是否含有数字460: " + linkedBinaryTree.contains(460));
System.out.println("前序遍历");
linkedBinaryTree.toPreString();
System.out.println("\n后序遍历");
linkedBinaryTree.toPostString();
}实验二:
public class RunInferenceTree {
public static void main(String[] args) {
InferenceTree preIn = new InferenceTree();
LinkedBinaryTree<String> linkedBinaryTree = preIn.generate0("ABDHIEJMNCFGKL","HDIBEMJNAFCKGL");
System.out.println("还原这棵树为:");
System.out.println(linkedBinaryTree.toString());
}实验三:
import java.io.FileNotFoundException;
public class RunDecisionTree {
public static void main(String[] args) throws FileNotFoundException {实验四:
import java.util.Scanner;
import java.util.Stack;
public class infixToSuffix{
//输入一个中缀表达式,使用树将中缀表达式转换为后缀表达式
private Stack
private Stack ope;//操作符栈
public infixToSuffix(){
treeExpression = new Stack
ope = new Stack();
}
private ExpressionTree getOperand(Stack
ExpressionTree temp;
temp = treeExpression.pop();
return temp;
}
public ExpressionTree getPostfixTree(String expression)
{
//得到二叉树
ExpressionTree operand1,operand2;
char operator;
String tempToken;
Scanner parser = new Scanner(expression);
while(parser.hasNext()){
tempToken = parser.next();
operator=tempToken.charAt(0);
if ((operator == ‘+‘) || (operator == ‘-‘) || (operator==‘‘) ||
(operator == ‘/‘)){
if (ope.empty())
ope.push(tempToken);//当储存符号的栈为空时,直接进栈
else{
String a =ope.peek()+"";//转化为String型的数据才能使用equals方法进行判断,否则永远都是false
if (((a.equals("+"))||(a.equals("-")))&&((operator==‘‘)||(operator==‘/‘)))
ope.push(tempToken);//当得到的符号的优先级大于栈顶元素时,直接进栈
else {
String s = String.valueOf(ope.pop());
char temp = s.charAt(0);
operand1 = getOperand(treeExpression);
operand2 = getOperand(treeExpression);
treeExpression.push(new ExpressionTree
(new ExpressionTreeOp(1, temp, 0), operand2, operand1));
ope.push(operator);
}//当得到的符号的优先级小于栈顶元素或者优先级相同时时,数字栈出来两个运算数,形成新的树进栈
}
}
else
treeExpression.push(new ExpressionTree(new ExpressionTreeOp
(2,‘ ‘,Integer.parseInt(tempToken)), null, null));
}
while(!ope.empty()){
String a = String.valueOf(ope.pop());
operator = a.charAt(0);
operand1 = getOperand(treeExpression);
operand2 = getOperand(treeExpression);
treeExpression.push(new ExpressionTree
(new ExpressionTreeOp(1, operator, 0), operand2, operand1));
}
return treeExpression.peek();
}
public String getTree()
{
return (treeExpression.peek()).printTree();
}
public int getResult(){
return treeExpression.peek().evaluateTree();
}
public void PostOrder() {
treeExpression.peek().toPostString();
}
public static void main(String[] args) {
String again="";
Scanner scan = new Scanner(System.in);
infixToSuffix list = new infixToSuffix();
do{
System.out.println("请输入一个中缀表达式:" + "eg.(3 + 4 * 5)");
String exp = scan.nextLine();
list.getPostfixTree(exp) ;
System.out.println(list.getTree());
System.out.println("后缀表达式为:");
list.PostOrder() ;
System.out.println("\n计算结果为:");
System.out.println(list.getResult());
System.out.println("\n你是否要继续?");
again=scan.nextLine();
}
while (again.equalsIgnoreCase("y"));
}
}
问题一解决方法:
重新编辑驱动代码,确认调用无误值已初始化。
问题二解决方法:
通过单步调试发现错误出在文本文件里面,第一个字符被设置为了空格,直接导致了截取字符出现了问题,提醒我以后的代码实践中要认真考虑到每一个字符的存在意义。
问题三解决办法:前面定义的实部和虚部都是double型的,我上网查找后发现assertEquals只支持int型,long型或boolean型的,总之在此时不支持(double,double)型的,我就寻思着怎么办啊...然后发现支持(string,string)型的。那就把数字加上""变成字符串,把后面的方法再加一个toString方法转化为字符串,assertEquals上的横线就消失了。
不管是什么树,名称都是LinkedBinaryTree,创建树用树达成目的已经变成目前编程的主流,尽管我自己肯定无法完全掌握,但是能学到东西毕竟是好的吧。
20182327 2019-2020-1 《数据结构与面向对象程序设计》实验八报告
标签:后序遍历 stat iterator expr 初始化 自己实现 错误 方法 表达
原文地址:https://www.cnblogs.com/kv888777/p/11871427.html