本文记录数据结构习题解析与实验指导(李冬梅)的课后实验六------基于二叉树的表达式求值算法
1 实验内容
没有找到实验的文字版本,只能把实验书的图片放上来了😅
2 基本思路
其实思路和中缀算术表达式求值这篇文章是一样的。两个栈,一个存操作符,一个存结果,只不过这次存结果的栈要改成存树。于是入栈就要改成这样:
遇到数字:
if (data[i] >= '0' && data[i] <= '9') {
Tree t = new Tree();
t.ans = data[i] - 48;
stack1.push(t);
}
需要计算时:
public void calculate2(char c) {
Tree t1, t2, t3;
switch (c) {
case '+':
t1 = stack1.pop();
t2 = stack1.pop();
t3 = new Tree(t2, t1);
t3.oper = '+';
stack1.push(t3);
break;
case '-':
t1 = stack1.pop();
t2 = stack1.pop();
t3 = new Tree(t2, t1);
t3.oper = '-';
stack1.push(t3);
break;
case '*':
t1 = stack1.pop();
t2 = stack1.pop();
t3 = new Tree(t2, t1);
t3.oper = '*';
stack1.push(t3);
break;
case '/':
t1 = stack1.pop();
t2 = stack1.pop();
t3 = new Tree(t2, t1);
t3.oper = '/';
stack1.push(t3);
break;
}
}
然后都结束后,我们的存树的栈的栈顶数据就会是二叉树的根节点。
然后,我们从根节点出发,利用递归,来求值。
public int getValue(char c, int lValue, int rValue) {