zoukankan      html  css  js  c++  java
  • 求树层数&深搜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;
    }


     

  • 相关阅读:
    Css的transform和transition
    移动端事件
    回流和重绘
    Swift更新至2.2版本 语言变化
    编程中遇到的 问题 总结
    NSNotificationCenter
    iOS中boolean、Boolean、BOOL、bool的区别
    推送的 代码实战写法
    MKNetworkKit的使用
    MKNetworkKit 的介绍
  • 原文地址:https://www.cnblogs.com/zswbky/p/5432034.html
Copyright © 2011-2022 走看看