//參考: goo.gl/pXeQhA
//中序轉前序
#include <iostream>
#include <string>
using namespace std;
unsigned GetOperatorLevel(char op)
{
if(op == '&')return 1;
if(op == '+' || op == '-')return 2;
if(op == '*' || op == '/')return 3; // 可按照運算元優先權修改
return 0;
}
unsigned MaxOperatorLevel()
{
return 3;
}
string FindNextLevelOperator(string inorder,unsigned &index,unsigned op_level = 0);
string FindValue(string inorder,unsigned &index)
{
if(index == inorder.size())return "";
char value = inorder[index];
++index;
return string()+value;
}
string FindNextLevelOperator(string inorder,unsigned &index,unsigned op_level)
{
if(op_level > MaxOperatorLevel())
{
// 遞迴到超過最大的 Operator Level ,如果沒有輸入錯誤,那只剩下運算元
return FindValue(inorder,index);
}
string x = FindNextLevelOperator(inorder,index,op_level+1);
while(index != inorder.size() && GetOperatorLevel(inorder[index]) == op_level)
{
char op = inorder[index];
++index;
string y = FindNextLevelOperator(inorder,index,op_level+1);
x = op + x + y;
}
return x;
}
void ToPreorder(string inorder)
{
unsigned index = 0;
cout << inorder << "\t轉前序:\t" <<FindNextLevelOperator(inorder,index) << endl;
}
int main()
{
string str;
while(cin >> str)
{
ToPreorder(str);
}
return 0;
}
Ly/lj4PogIM6IGdvby5nbC9wWGVRaEEKLy/kuK3luo/ovYnliY3luo8KCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVuc2lnbmVkIEdldE9wZXJhdG9yTGV2ZWwoY2hhciBvcCkKewogICAgaWYob3AgPT0gJyYnKXJldHVybiAxOwogICAgaWYob3AgPT0gJysnIHx8IG9wID09ICctJylyZXR1cm4gMjsKICAgIGlmKG9wID09ICcqJyB8fCBvcCA9PSAnLycpcmV0dXJuIDM7IC8vIOWPr+aMieeFp+mBi+eul+WFg+WEquWFiOasiuS/ruaUuQogICAgcmV0dXJuIDA7Cn0KdW5zaWduZWQgTWF4T3BlcmF0b3JMZXZlbCgpCnsKICAgIHJldHVybiAzOwp9CgpzdHJpbmcgRmluZE5leHRMZXZlbE9wZXJhdG9yKHN0cmluZyBpbm9yZGVyLHVuc2lnbmVkICZpbmRleCx1bnNpZ25lZCBvcF9sZXZlbCA9IDApOwoKc3RyaW5nIEZpbmRWYWx1ZShzdHJpbmcgaW5vcmRlcix1bnNpZ25lZCAmaW5kZXgpCnsKICAgIGlmKGluZGV4ID09IGlub3JkZXIuc2l6ZSgpKXJldHVybiAiIjsKCiAgICBjaGFyIHZhbHVlID0gaW5vcmRlcltpbmRleF07CiAgICArK2luZGV4OwogICAgcmV0dXJuIHN0cmluZygpK3ZhbHVlOwp9CnN0cmluZyBGaW5kTmV4dExldmVsT3BlcmF0b3Ioc3RyaW5nIGlub3JkZXIsdW5zaWduZWQgJmluZGV4LHVuc2lnbmVkIG9wX2xldmVsKQp7CiAgICBpZihvcF9sZXZlbCA+IE1heE9wZXJhdG9yTGV2ZWwoKSkKICAgIHsKICAgIAkvLyDpgZ7ov7TliLDotoXpgY7mnIDlpKfnmoQgT3BlcmF0b3IgTGV2ZWwg77yM5aaC5p6c5rKS5pyJ6Ly45YWl6Yyv6Kqk77yM6YKj5Y+q5Ymp5LiL6YGL566X5YWDCiAgICAgICAgcmV0dXJuIEZpbmRWYWx1ZShpbm9yZGVyLGluZGV4KTsKICAgIH0KICAgIHN0cmluZyB4ID0gRmluZE5leHRMZXZlbE9wZXJhdG9yKGlub3JkZXIsaW5kZXgsb3BfbGV2ZWwrMSk7CiAgICB3aGlsZShpbmRleCAhPSBpbm9yZGVyLnNpemUoKSAgJiYgR2V0T3BlcmF0b3JMZXZlbChpbm9yZGVyW2luZGV4XSkgPT0gb3BfbGV2ZWwpCiAgICB7CiAgICAgICAgY2hhciBvcCA9IGlub3JkZXJbaW5kZXhdOwogICAgICAgICsraW5kZXg7CiAgICAgICAgc3RyaW5nIHkgPSBGaW5kTmV4dExldmVsT3BlcmF0b3IoaW5vcmRlcixpbmRleCxvcF9sZXZlbCsxKTsKICAgICAgICB4ID0gb3AgKyB4ICsgeTsKICAgIH0KICAgIHJldHVybiB4Owp9Cgp2b2lkIFRvUHJlb3JkZXIoc3RyaW5nIGlub3JkZXIpCnsKICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgIGNvdXQgPDwgaW5vcmRlciA8PCAiXHTovYnliY3luo86XHQiIDw8RmluZE5leHRMZXZlbE9wZXJhdG9yKGlub3JkZXIsaW5kZXgpIDw8IGVuZGw7Cn0KCmludCBtYWluKCkKewogICAgc3RyaW5nIHN0cjsKICAgIHdoaWxlKGNpbiA+PiBzdHIpCiAgICB7CiAgICAJVG9QcmVvcmRlcihzdHIpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K