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

前言

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

LeetCode 启动!

题目:统计好节点的数目

代码与解题思路

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

核心思路:

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

go 复制代码
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,在这种情况下,我们用这种方法进行建图就非常方便:

go 复制代码
    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)
    }      

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

可以和我刷一辈子的每日一题吗?

一题一题,积累起来就是一辈子。

相关推荐
低音钢琴32 分钟前
【人工智能系列:机器学习学习和进阶01】机器学习初学者指南:理解核心算法与应用
人工智能·算法·机器学习
傻童:CPU2 小时前
C语言需要掌握的基础知识点之前缀和
java·c语言·算法
又见野草3 小时前
软件设计师知识点总结:数据结构与算法(超级详细)
数据结构·算法·排序算法
GalaxyPokemon3 小时前
有一个服务器,用于提供HTTP服务,但是需要限制每个用户在任意的100秒内只能请求60次,怎么实现这个功能
算法
fl1768314 小时前
基于opencv+Mediapipe+CNN实现用手势识别控制对鼠标操控python源码+项目说明+设计文档
算法
K 旺仔小馒头4 小时前
优选算法:01 双指针巧解移动零问题
c++·算法·刷题
sali-tec4 小时前
C# 基于halcon的视觉工作流-章49-网面破损
开发语言·图像处理·算法·计算机视觉·c#
ysa0510305 小时前
Fenwick 树进行快速统计
算法
im_AMBER5 小时前
Leetcode 33
算法·leetcode·职场和发展
andyguo5 小时前
全面解读大型语言模型测评:从认知演进到实操框架
人工智能·算法