本例子中是二叉树,如果不是二叉树的话用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\n",x,i); } else { T[x].son2=i; printf("T[%d].son2==%d\n",x,i); } } //cout<<dfs(1)<<endl; dfs(1); cout<<Max; return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步