单点时限: 2.0 sec
内存限制: 512 MB
问题描述
问题分析:
string转const char*的方法 string.c_str()
数据读取还可以使用读取字符,而不是string读入
scanf("(%d,%c)",&arr[i].level,&arr[i].key);
getchar();
但要注意cin后要加getchar
代码解决部分:
//树的层号表示
#include<bits/stdc++.h>
using namespace std;
#define MAXN 26
struct node
{
string key;
int level;
node* child[MAXN];
node* parents;
node()
{
parents=NULL;
for(int i=0;i<MAXN;i++)
{
child[i]=NULL;
}
}
node(int l,string k)
{
level=l;
key=k;
parents=NULL;
for(int i=0;i<MAXN;i++)
{
child[i]=NULL;
}
}
};
node* build_tree(node* arr,int n)
{
node* root,*p,*q;
if(n<=0)
return NULL;
else
{
root=&arr[0];
p=root;
for(int i=1;i<n;i++)
{
node* q=(arr+i);//q为要插入的元素
while(p->level>=q->level)
p=p->parents;//让p指向要插入元素的父节点
q->parents=p;
int j=0;
while(p->child[j]!=NULL) j++;
p->child[j]=q;
p=q;
}
}
return root;
}
//后序遍历
void InorderPrint(node* root)
{
if(root!=NULL)
{
int i=0;
while(root->child[i]!=NULL)
{
InorderPrint(root->child[i]);
i++;
}
cout<<root->key;
}
}
int main()
{
int n;cin>>n;
string s;
node arr[n];
for(int i=0;i<n;i++)
{
cin>>s;
int pos=s.find(',');
int len=s.find(")");
string s1=s.substr(1,pos-1);
string s2=s.substr(pos+1,len-3);
int height=atoi(s1.c_str());//要先把string转化成char*
arr[i]=node(height,s2);
//数据处理完毕
}
node* root=build_tree(arr,n);
InorderPrint(root);
system("pause");
return 0;
}