栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode 310. 最小高度树

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 310. 最小高度树

思路:树形dp,d1[i]表示以i为根节点向下的最高高度,d2表以i为根节点的向下的次高高度,p1,p2记录节点高度,up[i]表示以i为根向上的最高高度 代码:
class Solution {
public:
    vector> g;
    vector p1,p2,d1,d2,up;

    void dfs1(int u,int father){
        for(int x:g[u]){
            if(x==father) continue;
            dfs1(x,u);
            int d=d1[x]+1;
            if(d>=d1[u]){
                d2[u]=d1[u];d1[u]=d;
                p2[u]=p1[u];p1[u]=x;
            }else if(d>d2[u]){
                d2[u]=d;
                p2[u]=x;
            }

        }

    }

    void dfs2(int u,int father){
        for(auto x:g[u]){
            if(x==father) continue;
            if(p1[u]==x) up[x]=max(up[u],d2[u])+1;
            else up[x]=max(up[u],d1[u])+1;
            dfs2(x,u);

        }
    }
    vector findMinHeightTrees(int n, vector>& edges) {
        g.resize(n);
        d1=d2=p1=p2=up=vector(n);

        for(auto &e:edges){
            int a=e[0],b=e[1];
            g[a].push_back(b);
            g[b].push_back(a);
        }
        dfs1(0,-1);
        dfs2(0,-1);

        int mind=n+1;
        for(int i=0;i res;
        for(int i=0;i
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767984.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号