当前位置: 首页 > article >正文

Leetcode3249. 统计好节点的数目

Every day a Leetcode

题目来源:3249. 统计好节点的数目

解法1:深度优先搜索

建树,然后从根节点 0 开始 DFS 这棵树。

DFS 返回子树大小。

对于节点 x,如果其是叶子节点,或者其所有儿子子树大小都一样,那么答案加一。

代码:

/*
 * @lc app=leetcode.cn id=3249 lang=cpp
 *
 * [3249] 统计好节点的数目
 */

// @lc code=start
class Solution
{
public:
    int countGoodNodes(vector<vector<int>> &edges)
    {
        int n = edges.size() + 1; // 节点数

        // 构建邻接表
        vector<vector<int>> adj(n);
        for (vector<int> &edge : edges)
        {
            int u = edge[0], v = edge[1];
            adj[u].push_back(v);
            adj[v].push_back(u);
        }

        int ans = 0;

        // parent 为父节点
        function<int(int, int)> dfs = [&](int u, int parent) -> int
        {
            int cnt_sum = 1; // 节点总数,先计入自身
            int single_cnt = 0;
            bool valid = true;

            for (int v : adj[u])
            {
                // 规避邻接点中已访问过的父节点,不需要 visited 数组
                if (v == parent)
                    continue;

                int cnt = dfs(v, u);
                cnt_sum += cnt;
                // 检测子树的节点数量是否相同
                if (single_cnt == 0)
                    single_cnt = cnt;
                else if (single_cnt != cnt)
                    valid = false;
            }
            ans += valid;
            return cnt_sum;
        };

        dfs(0, -1); // -1 即不存在父节点
        return ans;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是数组 edges 的长度。

空间复杂度:O(n),其中 n 是数组 edges 的长度。


http://www.kler.cn/a/288199.html

相关文章:

  • 使用--log-file保存pytest的运行日志
  • Pytorch如何将嵌套的dict类型数据加载到GPU
  • ElasticSearch-全文检索(一)基本介绍
  • C# Winform--SerialPort串口通讯(ASCII码发送)
  • 数据结构--数组
  • ChatGPT登录失败的潜在原因分析
  • 驾驭Python与MySQL的桥梁:pymysql的神秘面纱
  • FlowUs 小程序:开启高效之旅,订阅内容超精彩
  • csrf的详解
  • 产业园区智慧招商解决方案
  • 今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 9月3日,星期二
  • P1.25/P1.538/P1.86COB/GOB超微小间距LED显示屏替换SMD时代到来
  • 常用排序算法(上)
  • 机器学习中的增量学习(Incremental Learning,IL)策略是什么?
  • Java基础 ——线程
  • QSlider禁止点击 和精准点击跳转
  • -Dide.browser.jcef.sandbox.enable=false 禁用设置沙盒环境,ubuntu24.04启动idea服务
  • 【机器学习入门】一文读懂线性可分支持向量机(一)
  • vue2.0中axios请求配置
  • 结合Vue与Mybatis-plus优雅的设计分页展示
  • 详细解说一下Python中的递归和基例
  • IJCAI-信也科技杯全球AI大赛-华东师范大学亚军队伍分享
  • 以下是一些常见的浏览器倒计时测试方法:
  • 从误删到重生:2024年数据恢复软件市场新趋势与精选工具
  • VirtualBox 中 Ubuntu 系统在桥连模式下网络适配器启动过慢或连接失败
  • 如何本地搭建Whisper语音识别模型