递归输出就行了
#include<bits/stdc++.h>
using namespace std;
struct tree{
int dot;
string s;
}t[1020];
vector<int>v[1020];
void print(int x)
{
for(int i=0;i<v[x].size();i++)
{
for(int j=1;j<=t[v[x][i]].dot;j++)
printf(".");
cout<<t[v[x][i]].s<<endl;
print(v[x][i]);
}
}
int main()
{
int n,x;
scanf("%d",&n);
t[0].dot=-1;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
cin>>t[i].s;
v[x].push_back(i);
t[i].dot=t[x].dot+1;
}
print(0);
return 0;
}