#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <cmath>
using namespace std;
struct ss{
int son1;
int son2;
}
T[10010];
int ans=1,Max=0;
void dfs(int n){
if(T[n].son1) { ans++; dfs(T[n].son1); }//有左孩子的时候遍历左孩子,深搜
if(T[n].son2) { ans++; dfs(T[n].son2); }//有右子的时候遍历右孩子,深搜
if(ans>Max) Max=ans;
ans--;//返回上一层
}
int main()
{
int n,i;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
int x;
scanf("%d",&x);
if(T[x].son1==0)
{
T[x].son1=i;
printf("T[%d].son1==%d\n",x,i);
}
else
{
T[x].son2=i;
printf("T[%d].son2==%d\n",x,i);
}
}
dfs(1);
cout<<Max;
return 0;
}
#include <algorithm>
#include <cstdio>
#include <string>
#include <cmath>
using namespace std;
struct ss{
int son1;
int son2;
}
T[10010];
int ans=1,Max=0;
void dfs(int n){
if(T[n].son1) { ans++; dfs(T[n].son1); }//有左孩子的时候遍历左孩子,深搜
if(T[n].son2) { ans++; dfs(T[n].son2); }//有右子的时候遍历右孩子,深搜
if(ans>Max) Max=ans;
ans--;//返回上一层
}
int main()
{
int n,i;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
int x;
scanf("%d",&x);
if(T[x].son1==0)
{
T[x].son1=i;
printf("T[%d].son1==%d\n",x,i);
}
else
{
T[x].son2=i;
printf("T[%d].son2==%d\n",x,i);
}
}
dfs(1);
cout<<Max;
return 0;
}