本例子中是二叉树,如果不是二叉树的话用vector会比较好
#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 dfs(int n){
int deepson1,deepson2;
if(T[n].son2&&T[n].son1){
deepson1=dfs(T[n].son1)+1; //有左孩子的时候遍历左孩子,深搜
deepson2=dfs(T[n].son2)+1;//有右子的时候遍历右孩子,深搜
return deepson1>deepson2?deepson1:deepson2;
}
if(T[n].son1&&!T[n].son2)
return dfs(T[n].son1)+1;
if(!T[n].son1&&T[n].son2)
return dfs(T[n].son2)+1;
if(!T[n].son1&&!T[n].son1)
return 1;
return 0;
}
*/
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
",x,i);
}
else
{
T[x].son2=i;
printf("T[%d].son2==%d
",x,i);
}
}
//cout<<dfs(1)<<endl;
dfs(1);
cout<<Max;
return 0;
}