#include <iostream>
#include <cstdio>
using namespace std;
int getdepth(int i);
struct node
{
int parent;
int right;
int left;
};
node tree[100010];
void print(int i)
{
cout<<"node "<<i<<": parent = "<<tree[i].parent<<", depth = "<<getdepth(i)<<", ";
if(tree[i].parent==-1)
{
cout<<"root, [";
}
else if(tree[i].left==-1)
cout<<"leaf, [";
else cout<<"internal node, [";
int j,k;
for(j=0,k=tree[i].left;k!=-1;j++,k=tree[k].right){
if(j) cout<<", ";
cout<<k;
}
cout<<"]"<<endl;
}
int getdepth(int i)
{
int d=0;
while(tree[i].parent!=-1)
{
i=tree[i].parent;
d++;
}
return d;
}
int main()
{
int n,id,d,c,l;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
tree[i].left=-1;
tree[i].parent=-1;
tree[i].right=-1;
}
for(int i=0;i<n;i++)
{
scanf("%d%d",&id,&d);
for(int j=0;j<d;j++)
{
scanf("%d",&c);
if(j==0){
tree[id].left=c;
}
else {tree[l].right=c;
}
l=c;
tree[c].parent=id;
}
}
for(int i=0;i<n;i++)
print(i);
return 0;
}
wa了一个小时之后才发现错在哪里,错就错在输出的时候不可以先判断tree[i].left==-1,再判断tree[i].parent==-1
正确输出样例:
如果先判断left,再判断parent,输出为: