zoukankan      html  css  js  c++  java
  • 二叉树的最长链长度—DFS buaacoding 树形DP初步-二叉树

    首先虽然这道题说的是树形DP的事情,但是其实本质上还是考察DFS的事情,说起深搜,自己的理解还是太浅了,一开始对这道题的理解是,默认题目里说的最长链说的是一定会经过俩个叶节点,但是不一定会经过根节点。但是实质上根节点不一定在最长链的通路上。而我一开始实现的操作还是利用了上学期的数据结构的利用递归实现求树的深度。

    这个时候深搜的作用就被大大消减。深度优先搜索实质上是一种算法,一种思想,而不是应该被拘束在函数返回值里,在搜索的过程中,完全可以进一步的采取操作,比如这道题的实时更新最大值。这种实时的更新,可以保持最大值更新,其实本质上算法还是递归寻找的问题,但是修改了Depth函数后在函数内部也可以实现。

    还有就是从简单的Depth函数过渡到,要想到用一个全局数组来实现存储和记录的功能。

    #include <algorithm>
    #include <iostream>
    using namespace std;
    const int Maxlen = 1e5 + 10;
    int l[Maxlen],r[Maxlen],Depth[Maxlen];
    int ans=0;
    int DFS(int k);
    int main(){
    
        int n,x,y,i,j,k;
        scanf("%d",&n);
        for(i=1;i<=n;i++){
            scanf("%d %d",&x,&y);
            l[i]=x;
            r[i]=y;
        }
        ans=max(ans,DFS(1));
        printf("%d
    ",ans-1);
        return 0;
    }
    int DFS(int k){
        if(k==0)
            return 0;
        Depth[l[k]]=DFS(l[k]);
        Depth[r[k]]=DFS(r[k]);
        ans=max(ans,Depth[l[k]] + Depth[r[k]] + 1);
        return Depth[k]=max(Depth[l[k]] ,Depth[r[k]]) + 1;
    }
  • 相关阅读:
    git
    界面编程与视图(View)组件
    genymotion的安装
    210中断故障分析
    6410/210按键中断编程
    2440按键中断编程
    中断处理流程深度剖析
    scrapy 写文件进行debug调试
    scrapy 爬虫中间件-offsite和refer中间件
    scrapy文件管道
  • 原文地址:https://www.cnblogs.com/visper/p/10058650.html
Copyright © 2011-2022 走看看