求樹層數&深搜BFS(模板)
阿新 • • 發佈:2019-01-30
本例子中是二叉樹,如果不是二叉樹的話用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; }