读书人

已知中序后序确定一棵树并以特定形

发布时间: 2012-05-29 12:16:00 作者: rapoo

已知中序后序,确定一棵树,并以特定形式输出
例如树的中序是: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;    }
[解决办法]
你想以怎么样的顺序输出树型结构?输出多了,反而觉得你这个混乱了。

读书人网 >C++

热点推荐