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

【LeetCode】每日一题 2024_11_14 统计好节点的数目(图/树的 DFS)

前言

每天和你一起刷 LeetCode 每日一题~

LeetCode 启动!

题目:统计好节点的数目

代码与解题思路

先读题:题目要求我们找出好节点的数量,什么是好节点?“好节点的所有子节点的数量都是相同的”,拿示例一举例,0 是好节点,因为他的子节点 1 和 2 拥有的子节点数量都是 2,子节点数量相同,以此类推,所有叶子节点也都是好节点~

核心思路:

我们只需要在遍历计算树的每个节点数量的同时,判断当前节点的每个子节点的数量是否相同即可,我的方法是通过记录一个 sz0 作为子节点数量的比较对象,判断是否出现数量不同的子节点,具体操作代码如下:

func countGoodNodes(edges [][]int) (ans int) {
    // 题目给了一棵无向树,先建树/图
    g := make([][]int, len(edges)+1)
    for _, e := range edges {
        x, y := e[0], e[1]
        g[x] = append(g[x], y)
        g[y] = append(g[y], x)
    }      

    // 递归计算节点子树的节点数量
    var dfs func(int, int) int
    dfs = func(x, fa int) int {
        // 计算好节点数量,sz0 作为第一个子节点,ok 用于判断子节点数量是否相同
        size, sz0, ok := 1, 0, true
        for _, y := range g[x] { // 遍历下一个节点
            if y == fa { // 只往下递归(树)
                continue
            }
            sz := dfs(y, x) // y 的子节点的数量
            if sz0 == 0 {
                sz0 = sz
            } else if sz0 != sz { // 有子节点数量不同
                ok = false
            }
            size += sz
        }
        if ok == true { // 子节点数量都相同,是好节点
            ans++
        }
        return size
    } 
    dfs(0, -1)
    return ans
}

常用模板积累:

建图/树,在力扣或者其他的 OJ 中,一般都会给出一个二维的 edges 数组,其中的每一个小数组都代表:节点1 -> 节点2,在这种情况下,我们用这种方法进行建图就非常方便:

    g := make([][]int, len(edges)+1)
    for _, e := range edges {
        x, y := e[0], e[1]
        g[x] = append(g[x], y)
        g[y] = append(g[y], x)
    }      

每天进步一点点,我们明天不见不散~

可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。


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

相关文章:

  • A037-基于Spring Boot的二手物品交易的设计与实现
  • Vscode/Code-server无网环境安装通义灵码
  • 【C/C++】Lambda 用法
  • Vue实现响应式导航菜单:桌面端导航栏 + 移动端抽屉式菜单
  • R语言-快速对多个变量取交集
  • 两大新兴开发语言大比拼:Move PK Rust
  • 计算机网络-MSTP工作原理
  • 学习QT第二天
  • RocketMQ 消费队列的写入跟commit log的写入是否同步进行的
  • C++builder中的人工智能(27):如何将 GPT-3 API 集成到 C++ 中
  • 全面掌握Spring Boot异常处理:策略与实践
  • LeetCode77:组合(剪枝操作)
  • prop校验,prop和data区别
  • 数组相关的面试题
  • 基于Java Springboot图书借阅系统
  • 【进阶系列】正则表达式 #匹配
  • 探寻优质的 PostgreSQL 中级认证专家学习机构
  • DNS域名解析服务器--RHCE
  • 使用SaaS化的Aurora应用快速搭建私人ChatGPT助手
  • Deep Fake Detection (DFD) Entire Original Dataset数据集下载
  • 11.18 机器学习-线性回归(重点)-最小二乘法
  • (二)PyTorch简要教学
  • 莱特币转型MEME币:背后隐含的加密市场现象
  • QT基本绘图
  • k8s 1.26安装
  • 集群聊天服务器(11)客户端开发