zoukankan      html  css  js  c++  java
  • 最长链

    【题目描述】

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

    【输入描述】

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

    接下来N行,第i行包含两个正整数L[i]、R[i],表示了结点i的左儿子与右儿子编号。

    如果L[i]=0,表示结点i没有左儿子,如果R[i]=0,则表示没有右儿子。

    【输出描述】

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

    【样例输入】

    5

    2 3

    4 5

    0 6

    0 0

    0 0

    【样例输出】

    4

    【数据范围及提示】

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

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

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

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

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

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

    源代码:
    
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,Ans,i[100001][2],f[100001]={0};
    void DFS(int t) //类似于树形DP。
    {
        if (i[t][0])
          DFS(i[t][0]);
        if (i[t][1])
          DFS(i[t][1]);
        f[t]=max(f[i[t][0]],f[i[t][1]])+1;
        Ans=max(f[i[t][0]]+f[i[t][1]]+1,Ans); //仔细想一想,其实就是这种链。
    }
    int main()
    {
        scanf("%d",&n);
        for (int a=1;a<=n;a++)
          scanf("%d%d",&i[a][0],&i[a][1]);
        DFS(1);
        printf("%d",Ans-1); //奇怪的输出。
        return 0;
    }
  • 相关阅读:
    基于Angular和Spring WebFlux做个小Demo
    一个数据源demo
    我需要一个什么样子的动态数据源模块
    JavaScript对象类型之创建对象
    JavaScript对象类型之简单介绍
    C# 调用者信息获取
    我的收藏之数据库优化
    Linq标准查询操作符
    Nunit测试工具使用实例
    搜索引擎中的搜索技巧
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5838567.html
Copyright © 2011-2022 走看看