http://acm.split.hdu.edu.cn/showproblem.php?pid=1805
给你后缀表达式让你输出前缀表达式
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#define maxs 10010
#include <stack>
#include <queue>
#define MME(i,j) memset(i,j,sizoef(i))
using namespace std;
char s[maxs];
struct node
{
char data;
node *left,*right;
node()
{
data='\0';
left=right=NULL;
}
}root;
void print(node *ss)
{
char op[maxs];
char *o=op+10000;
*o='\0';
queue<node *> ql;
ql.push(ss);
node *temp;
while(!ql.empty())
{
temp=ql.front();
ql.pop();
o--;
*o=temp->data;
if(temp->left)
ql.push(temp->left);
if(temp->right)
ql.push(temp->right);
}
puts(o);
}
int main()
{
int t,len;
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
len=strlen(s);
node *temp=NULL;
stack <node*> mystack;
for(int i=0;i<len;i++)
{
if(s[i]>='a')
{
temp=new node;
temp->data=s[i];
mystack.push(temp);//小写的都入栈,
}
else{
temp = new node;
temp->data=s[i];
temp->right=mystack.top();//因为后缀表达式,左右的顺序入栈那么出栈的顺序是右左
mystack.pop();
temp->left=mystack.top();
mystack.pop();
mystack.push(temp);
}
}
print(mystack.top());
delete mystack.top();
mystack.pop();
}
return 0;
}