Aizu ALDS1_7_A Rooted Trees

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时汾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值