本例子中是二叉树,如果不是二叉树的话用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; }