怎么将中缀式转换成后缀式 C语言 递归
如何将中缀式转换成后缀式 C语言 递归
如输入
(5*(((9+8)*(4*6))+7))
转换成
598+46**7+*
如上所述对于中缀式 两个操作数进行运算时必须要用括号括起来!
使用堆栈 不用说了 很简单 但是递归怎么做?
------解决方案--------------------
写错了,应该是:
前缀:
1,输出根节点;2,递归输出左子树;3,递归输出右子树。
中缀:
1,递归输出左子树;2,输出根节点;3,递归输出右子树。
------解决方案--------------------
用中缀表达式建立树,好像也很麻烦。后续递归遍历简单。
还是直接解析更容易些。
------解决方案--------------------
如输入
(5*(((9+8)*(4*6))+7))
转换成
598+46**7+*
如上所述对于中缀式 两个操作数进行运算时必须要用括号括起来!
使用堆栈 不用说了 很简单 但是递归怎么做?
------解决方案--------------------
写错了,应该是:
前缀:
1,输出根节点;2,递归输出左子树;3,递归输出右子树。
中缀:
1,递归输出左子树;2,输出根节点;3,递归输出右子树。
------解决方案--------------------
用中缀表达式建立树,好像也很麻烦。后续递归遍历简单。
还是直接解析更容易些。
------解决方案--------------------
#include <ctype.h>
#include <stdio.h>
#include <string.h>
int transfer(char const* _ori,char* _dst)
{
char last_opt = ' ';
char last_last_opt = ' ';
char const* ori = _ori;
char * dst = _dst;
char buf[1024] = {0,};
int len = 0;
while (0 != *ori) {
if (isdigit(*ori)) {
*dst++ = *ori++;
if ('*' == last_opt
------解决方案--------------------
'/' == last_opt) {
*dst++ = last_opt;
last_opt = last_last_opt;
last_last_opt = ' ';
}
}
else if ('+' == *ori