题目链接

题目描述
现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e6+5;
int fa[maxn];
int child[maxn];
int vis[maxn];
int dfs(int i); 
void init()
{
    for(int i=0;i<maxn;++i)
    {
        fa[i]=i;
        child[i]=0;
        vis[i]=0;
    }
}
void join(int x,int y)    //x是y的父亲 
{
    child[x]++;
    if(child[x]>=3)
    {
        vis[y]=1;
        return ;
    }
    fa[y]=x;
    return ;
}
int main()
{
    int n,x,y;
    while(cin>>n)
    {
        init();
        for(int i=0;i<n-1;i++) 
        {
            cin>>x>>y;
            join(x,y);    
        }
        int big_num=0,a;
        for(int i=0;i<n-1;i++)
        {
            a=dfs(i);
            big_num=big_num>a?big_num:a;
        }
        cout<<big_num<<endl;
    }
    return 0;
}
int dfs(int i)
{
    int tree_len=1;
    int t=i;
    while(t!=fa[t])
    {
        t=fa[t];
        tree_len++;
    }
    if(vis[t]) return 0;
     return tree_len;    
}
Last modification:September 23rd, 2019 at 12:55 pm
如果觉得我的文章对你有用,请随意赞赏