C++利用二叉树求表达式的值
1.内容及要求
将通过二叉链表实现的表达式二叉树进行输出,同时计算出结果。
要求:
1)二叉树建立时,使用先序建立;
2)四个运算符包括:+, -, *, /;
3 ) 在输出时,遇到优先级问题时,相应的括号也要输出。
提示:
1)递归执行下列步骤即可求值:先分别求出左子树和右子树表示的子表达式的值,最后根据根结点的运算符的要求,计算出表达式的最后结果。
2)二叉树的中序遍历序列与原算术表达式基本相同,但是需要将中序序列加上括号,即当根结点运算符优先级高于左子树(或右子树)根结点运算符时,就需要加括号。
例如:
输入 Result``
-+3@@2@@-4@@1@@/6@@2@@
3+2(4-1)-6/2=6
3@@+/6@@2@@-3@@1@@
3(6/2+3-1)=15
2.具体代码及解析
- 必要的头文件
#include <iostream>
#include <stdlib.h>
#include<bits/stdc++.h>
using namespace std;
2.二叉树的结点定义
typedef struct node
{
char data;//当前结点对应的值
struct node *lson, *rson;//左子树指针和右子树指针
} *TreeNode,Node;
3.创建二叉树
void creattree(TreeNode &tree)
{
char ch;
cin>>ch;//键盘输入字符
if(ch=='@')//判断该字符是否为结束标志符
{
tree=NULL;
}
else//不是结束标志符,则运用递归思想创建左子树和右子数
{
tree=new Node;
tree->data=ch;
creattree(tree->lson);
creattree(tree->rson);
}
};
4.中序输出表达式
void inOrder(TreeNode tree)