zoukankan      html  css  js  c++  java
  • 最长链(codevs 1814)

    题目描述 Description

    现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少,保证了1号结点为二叉树的根。

    输入描述 Input Description

    输入的第1行为包含了一个正整数N,为这棵二叉树的结点数,结点标号由1至N。

    接下来N行,这N行中的第i行包含两个正整数l[i], r[i],表示了结点i的左儿子与右儿子编号。如果l[i]为0,表示结点i没有左儿子,同样地,如果r[i]为0则表示没有右儿子。

    输出描述 Output Description

    输出包括1个正整数,为这棵二叉树的最长链长度。

    样例输入 Sample Input

    5

    2 3

    4 5

    0 6

    0 0

    0 0

    样例输出 Sample Output

    4

    数据范围及提示 Data Size & Hint

    【样例说明】

      4-2-1-3-6为这棵二叉树中的一条最长链。

    【数据规模】

    对于10%的数据,有N≤10;

    对于40%的数据,有N≤100;

    对于50%的数据,有N≤1000;

    对于60%的数据,有N≤10000;

    对于100%的数据,有N≤100000,且保证了树的深度不超过32768。

    【提示】

    关于二叉树:

    二叉树的递归定义:二叉树要么为空,要么由根结点,左子树,右子树组成。左子树和右子树分别是一棵二叉树。

    请注意,有根树和二叉树的三个主要差别:

    1. 树的结点个数至少为1,而二叉树的结点个数可以为0;

    2. 树中结点的最大度数没有限制,而二叉树结点的最大度数为2;

    3. 树的结点无左、右之分,而二叉树的结点有左、右之分。

    关于最长链:

    最长链为这棵二叉树中一条最长的简单路径,即不经过重复结点的一条路径。可以容易证明,二叉树中最长链的起始、结束结点均为叶子结点。

    /*
       分析:一遍dfs求出某个节点到到叶子节点的最长距离,记为len[i],在求出以某个点为
          祖先的最长链长度,记为f[i],取最大的f[i]即为答案
    */
    #include<cstdio>
    #include<iostream>
    #define M 100010
    using namespace std;
    int lch[M],rch[M],len[M],f[M],n;
    int read()
    {
        char c=getchar();int num=0,flag=1;
        while(c<'0'||c>'9'){if(c=='-')flag=-1;c=getchar();}
        while(c>='0'&&c<='9'){num=num*10+c-'0';c=getchar();}
        return num*flag;
    }
    void dfs(int x)
    {
        if(len[x])return;
        if(lch[x])dfs(lch[x]);
        if(rch[x])dfs(rch[x]);
        if(rch[x]||lch[x])len[x]=max(len[lch[x]],len[rch[x]])+1;
    }
    int main()
    {
        n=read();
        for(int i=1;i<=n;i++)
          lch[i]=read(),rch[i]=read();
        dfs(1);
        for(int i=1;i<=n;i++)
        {
            f[i]=len[lch[i]]+len[rch[i]];
            if(lch[i])f[i]++;
            if(rch[i])f[i]++;
        }
        int ans=0;
        for(int i=1;i<=n;i++)
          ans=max(ans,f[i]);
        printf("%d",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    与众不同 windows phone (50)
    与众不同 windows phone (49)
    重新想象 Windows 8.1 Store Apps (93)
    重新想象 Windows 8.1 Store Apps 系列文章索引
    重新想象 Windows 8.1 Store Apps (92)
    重新想象 Windows 8.1 Store Apps (91)
    重新想象 Windows 8.1 Store Apps (90)
    重新想象 Windows 8.1 Store Apps (89)
    重新想象 Windows 8.1 Store Apps (88)
    重新想象 Windows 8.1 Store Apps (87)
  • 原文地址:https://www.cnblogs.com/harden/p/5741999.html
Copyright © 2011-2022 走看看