Aizu ALDS1_7_A Rooted Trees
#include<bits/stdc++.h>
using namespace std;
struct node{
int parent,left,right;
}T[100005];
int D[100005];
int nodedeep(int x,int p){
D[x]=p;
if(T[x].right!=-1){nodedeep(T[x].right,p);}
if(T[x].left!=-1){nodedeep(T[x].left,p+1);}
}
void printnode(int u)
{
cout<<"node "<<u<<": ";
cout<<"parent = "<<T[u].parent<<", ";
cout<<"depth = "<<D[u]<<", ";
if (T[u].parent==-1) cout<<"root, ";
else if (T[u].left==-1) cout<<"leaf, ";
else cout<<"internal node, ";
cout<<'[';
for (int i = 0, c=T[u].left; c!=-1 ; i++, c=T[c].right) {
if (i) cout<<", ";
cout<<c;
}
cout<<']'<<endl;
}
int main(){
int n,id,k,c,l,r;
cin>>n;
for(int i=0;i<n;i++){
T[i].parent=T[i].left=T[i].right=-1;
}
for(int i=0;i<n;i++){
cin>>id>>k;
for(int i=1;i<=k;i++){
cin>>c;
if(i==1){T[id].left=c;}
else{T[l].right=c;}
l=c;
T[c].parent=id;
}
}
for(int i=0;i<n;i++){
if(T[i].parent==-1){r=i;}
}
nodedeep(r,0);
for(int i=0;i<n;i++){
printnode(i);
}
return 0;
}