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


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


     

  • 相关阅读:
    sed 命令
    find命令详解
    texlive、
    linux source命令与export命令的区别
    vscode浏览器打开html vscode修改默认浏览器
    npm install说明
    有关必须组件化的需求
    日志文件上传的时机
    TypeScript vs. C#: LINQ
    JavaScript 运行机制详解:再谈Event Loop
  • 原文地址:https://www.cnblogs.com/zswbky/p/5432034.html
Copyright © 2020-2023  润新知