Sweety

Practice makes perfect
随笔 - 620, 文章 - 0, 评论 - 2, 阅读 - 20万

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

求树层数&深搜BFS(模板)

Posted on   蓝空  阅读(431)  评论(0编辑  收藏  举报

 

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


 

 

 

 

 

点击右上角即可分享
微信分享提示