题目
思路
熟悉好后序遍历的输出即可
代码
#include<iostream>
using namespace std;
struct dot
{
char data;
dot* parent;
dot** child;
int child_num;
dot()
{
data = 0;
parent = NULL;
child = new dot*[26];
child_num = 0;
}
};
struct tree
{
dot* root;
tree(){root = new dot;}
void post_print(dot* root, int child_num)
{
for(int i = 0; i < child_num; i++)
{
post_print(root->child[i], root->child[i]->child_num);
}
cout << root->data;
}
};
int main()
{
tree T;
int n;cin >> n;
getchar();
string str;
getline(cin,str);
int l = str.length();
for(int i = 0; i < l; i++)
{
int layer = 0;
char data;
if(str[i] == '0')
{
i+=2;
T.root->data = str[i];
}
if(str[i] > '0' && str[i] <= '9')
{
while(i < l && str[i] >= '0' && str[i] <= '9')
{
layer *= 10;
layer += str[i++] - '0';
}
i++;
if(i < l && str[i] >= 'A' && str[i] <= 'Z')
{
data = str[i];
}
dot* child = new dot;
dot* temp = T.root;
for(int i = 1; i < layer; i++)//
{
temp = temp->child[temp->child_num - 1];
}
temp->child[temp->child_num++] = child;
child->parent = temp;
child->data =data;
//cout << data << " " << layer << endl;
}
}
T.post_print(T.root, T.root->child_num);
}