已知中序后序,确定一棵树,并以特定形式输出
例如树的中序是:bac;后序是:bca
那么输出结果应该是:(b)a(c)
求改错。。。
#include <iostream>
using namespace std;
char InOrder[20], PostOrder[20];
void DPS(int InStart, int InEnd, int PostStart, int PostEnd)
{
int pos;
for (pos = PostStart; InOrder[pos] != PostOrder[PostEnd]; pos++)
{}
if (pos != InStart)
{
cout<<"(";
DPS(InStart, pos -1, PostStart, PostStart + pos - 1);
cout<<")";
}
cout<<PostOrder[PostEnd];
if (pos != InEnd)
{
cout<<"(";
DPS(pos + 1, InEnd, PostEnd - 1, PostStart + pos);
cout<<")";
}
}
int main(void)
{
int n;
cout<<"您要判断的次数 : ";
cin>>n;
for (int i = 0; i < n; i++)
{
cout<<"输入中序 :";
cin>>InOrder;
cout<<"输入后序 :";
cin>>PostOrder;
int len = strlen(InOrder);
DPS(0, len - 1, 0, len-1);
}
system("pause");
return 0;
}
[解决办法]
- C/C++ code
#include <iostream>using namespace std;char InOrder[20], PostOrder[20];void DPS(int InStart, int InEnd, int PostStart, int PostEnd){ int pos; for (pos = PostStart; InOrder[pos] != PostOrder[PostEnd]; pos++) {} if (pos != InStart) { cout<<"("; DPS(InStart, pos -1, PostStart, PostStart + pos - 1); cout<<")"; } cout<<PostOrder[PostEnd]; if (pos != InEnd) { cout<<"("; DPS(pos + 1, InEnd, PostEnd - 1, PostStart + pos); cout<<")"; }}int main(void){ int n; cout<<"您要判断的次数 : "; cin>>n; for (int i = 0; i < n; i++) { cout<<"输入中序 :"; cin>>InOrder; cout<<"输入后序 :"; cin>>PostOrder; int len = strlen(InOrder); DPS(0, len - 1, 0, len-1); } system("pause"); return 0; }
[解决办法]
你想以怎么样的顺序输出树型结构?输出多了,反而觉得你这个混乱了。