思想:
1.将输入的中缀表达式转化为后缀表达式。
2.用后缀表达式构造表达式二叉树。
3.检验二叉树是否创建成功。采用的是递归遍历,三种常规遍历先中后序遍历。
4.后缀表达式的转换:
优先级+-<*/<^<(),当a中的字符为数字时直接放入b,为运算符时根据优先级入栈(S1),优先级高的位于栈顶。()运算符较为特殊,当遇到左括号时入栈,直到遇到右括号才出栈,且出栈是括号里的所有元素。
5.后缀表达式建树过程:
假设输入:(a+b)*(c*(d+e)),转为后缀表达式为:ab+cde**,根据后缀表达式建立二叉树。
代码实现:
中缀转后缀:
void TransLate(Stack S, char a[], char b[]) {
char ch, element = NULL;
int i = 0, j = 0;
ch = a[i++];
while (ch != '0') {
switch (ch) {
case'('://左括号出现,右括号不出现就有符号入栈
Push(S, ch);
break;
case')'://右括号出现,括号里面的所有符号出栈
while (Top(S, &element) && element != '(') {
Pop(S, &element);