leetcode周赛5465. 子树中标签相同的节点数


给你一棵树(即,一个连通的无环无向图),这棵树由编号从 0 到 n - 1 的 n 个节点组成,且恰好有 n - 1 条 edges 。树的根节点为节点 0 ,树上的每一个节点都有一个标签,也就是字符串 labels 中的一个小写字符(编号为 i 的 节点的标签就是 labels[i] )

边数组 edges 以 edges[i] = [ai, bi] 的形式给出,该格式表示节点 ai 和 bi 之间存在一条边。

返回一个大小为 n 的数组,其中 ans[i] 表示第 i 个节点的子树中与节点 i 标签相同的节点数。

树 T 中的子树是由 T 中的某个节点及其所有后代节点组成的树。
示例1

输入:n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], labels = “abaedcd”
输出:[2,1,1,1,1,1,1]
解释:节点 0 的标签为 ‘a’ ,以 ‘a’ 为根节点的子树中,节点 2 的标签也是 ‘a’ ,因此答案为 2 。注意树中的每个节点都是这棵子树的一部分。
节点 1 的标签为 ‘b’ ,节点 1 的子树包含节点 1、4 和 5,但是节点 4、5 的标签与节点 1 不同,故而答案为 1(即,该节点本身)。

注意不一定是二叉树。

自底向上递归的方法

当前节点需要知道下面都有哪些节点,然后把所有的子结点有几个返回(map形式)。虽然看着时间复杂度比较大,但是由于只有小写字母,每次不会消耗太多时间。
具体看代码:

class Solution {//自底向上递归,当前节点需要知道下面都有哪些节点,然后把所有的子结点有几个返回(map形式)public int[] countSubTrees(int n, int[][] edges, String labels) {HashMap<Integer,List<Integer>> map = new HashMap<>(labels.length());//build graphfor (int i = 0; i < edges.length; i++) {//无向图存两次边List<Integer> tl = map.getOrDefault(edges[i][0], new ArrayList<Integer>());tl.add(edges[i][1]);map.put(edges[i][0],tl);tl = map.getOrDefault(edges[i][1], new ArrayList<>());tl.add(edges[i][0]);map.put(edges[i][1],tl);}//System.out.println(map);ans = new int[n];visited = new int[n];HashMap<Character,Integer> tmap = traverse(0,map,labels);//System.out.println(tmap);return ans;}private int[] ans;private int[] visited;private HashMap<Character,Integer> traverse(int root,HashMap<Integer,List<Integer>> map,String lables) {HashMap<Character,Integer> res = new HashMap<>();if (visited[root] == 1) {//访问过了就不再访问return res;}visited[root] = 1;List<Integer> children = map.get(root);char r = lables.charAt(root);for (Integer i : children) {if (visited[i] == 1) {continue;}//把子树的节点情况复制过来HashMap<Character,Integer> hsc = traverse(i,map,lables);//copyIterator<Map.Entry<Character,Integer>> it = hsc.entrySet().iterator();while (it.hasNext()) {Map.Entry<Character,Integer> en = it.next();int t = en.getValue();t += res.getOrDefault(en.getKey(),0);res.put(en.getKey(),t);}}//加上自己的节点int self = res.getOrDefault(r,0) + 1;ans[root] = self;res.put(r,self);return res;}
}

这周做两道就700多名了,微软题还是厉害啊。
leetcode 118

leetcode周赛5465. 子树中标签相同的节点数相关推荐

  1. [leetcode周赛198] 5465. 子树中标签相同的节点数

    给你一棵树(即,一个连通的无环无向图),这棵树由编号从 0 到 n - 1 的 n 个节点组成,且恰好有 n - 1 条 edges .树的根节点为节点 0 ,树上的每一个节点都有一个标签,也就是字符 ...

  2. leetcode 5465. 子树中标签相同的节点数

    代码能力越来越菜了...... 题目链接 这题本来就是一个普普通通的DFS,但我却掉进了坑了,一直在超时,后面看了题解以后才恍然大悟. 我一开始的想法是,dp[i][k]表示第i个节点为根的情况下,含 ...

  3. easyui的tree获取父节点_力扣 1519——子数中标签相同的节点数

    本题主要在于对树这种数据结构的考察,以及深度优先遍历的使用,优化时可以采取空间换时间的策略. 原题 给你一棵树(即,一个连通的无环无向图),这棵树由编号从 0 到 n - 1 的 n 个节点组成,且恰 ...

  4. LeetCode 1617. 统计子树中城市之间最大距离(枚举所有可能+图的最大直径)

    文章目录 1. 题目 2. 解题 1. 题目 给你 n 个城市,编号为从 1 到 n .同时给你一个大小为 n-1 的数组 edges ,其中 edges[i] = [ui, vi] 表示城市 ui ...

  5. 如何配置神经网络中的层数和节点数

    向AI转型的程序员都关注了这个号

  6. 【LeetCode 每日一题】1617. 统计子树中城市之间最大距离(hard)

    1617. 统计子树中城市之间最大距离   图论啊,那我先寄为敬.今天是代码搬运工.   题意很好理解啊,就是给你一个图,让你返回所有直径对应的子树的数量.是的没错,是所有直径,你不仅要枚举 1 − ...

  7. [LeetCode周赛复盘] 第 89 场双周赛20221015

    [LeetCode周赛复盘] 第 89 场双周赛20221015 一.本周周赛总结 二. [Easy] 6208. 有效时间的数目 1. 题目描述 2. 思路分析 3. 代码实现 三.[Medium] ...

  8. 宝宝也能看懂的 leetcode 周赛 - 174 - 3

    1339. 分裂二叉树的最大乘积 Hi 大家好,我是张小猪.欢迎来到『宝宝也能看懂』系列之 leetcode 周赛题解. 这里是第 174 期的第 3 题,也是题目列表中的第 1339 题 -- 『分 ...

  9. LeetCode 1707. 与数组中元素的最大异或值(Trie树)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个由非负整数组成的数组 nums .另有一个查询数组 queries ,其中 queries[i] = [xi, mi] . 第 i 个查询的答案是 ...

最新文章

  1. oracle修改表结构的sql命令是什么,sql语句中修改表结构的命令是什么?
  2. python画三维温度散点图-python 绘制三维图形、三维数据散点图
  3. hdu 4027(线段树)
  4. fatal error C1083: Cannot open include file: 'ceconfig.h': No such file or directory
  5. Row size too large ( 8126)(解决)
  6. matlab输入集合,matlab关于集合的操作大全
  7. java什么叫声明异常_java – 声明异常而不是处理它的重点是什么
  8. 二叉搜索树判定方法(c++实现)
  9. 目标检测——对数据进行EDA分析的学习笔记
  10. unix--Tripwire 应用
  11. java计数器_Java高效计数器
  12. 基于xterm.js + socket.js的Web SSH
  13. Unity游戏开发案例分享
  14. 程序人生 - 创可贴使用不当或致截肢
  15. 用户画像业务数据调研及ETL(二)持续更新中...
  16. 使用Keras画神经网络准确性图
  17. PostgreSQL逻辑备份pg_dump使用及其原理解析
  18. burnintest激活_PassMark BurnInTest Pro v9.0.1006(拷机软件)真正注册版
  19. 爬虫——Scrapy框架案例一:手机APP抓包
  20. 设计师经常面对的11种职场问题

热门文章

  1. 图解 6 种「树」,你心中有数吗。。。
  2. android问题1-程序图标无法正常显示,只显示机器人图标
  3. 网上银行转账是怎么测的,设计一下测试用例
  4. 如何在win7+centos7双系统中添加win7启动菜单
  5. 异步时钟处理之结绳法2
  6. [附源码]Python计算机毕业设计Django校园代取快递系统
  7. AI深度学习入门与实战15 TensorBoard:实验统计分析助手
  8. 《薄冰实用英语语法详解》连载之三:代词
  9. 词云python_如何建立关键字词库,怎么增加网站关键词库?
  10. 智能家居 DIY 教程连载4——手把手教你连云