652. 寻找重复的子树 - 力扣(LeetCode)

/*** Definition for a binary tree node.* function TreeNode(val, left, right) {*     this.val = (val===undefined ? 0 : val)*     this.left = (left===undefined ? null : left)*     this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {TreeNode[]}*/
var findDuplicateSubtrees = function(root) {const seen = new Map();const repeat = new Set();const dfs = (node) => {if (!node) {return "";}let sb = '';sb += node.val;sb += "(";sb += dfs(node.left);sb += ")(";sb += dfs(node.right);sb += ")";if (seen.has(sb)) {repeat.add(seen.get(sb));} else {seen.set(sb, node);}return sb;}dfs(root);return [...repeat];
};

执行结果:通过

执行用时:108 ms, 在所有 JavaScript 提交中击败了67.16%的用户

内存消耗:48.7 MB, 在所有 JavaScript 提交中击败了43.14%的用户

通过测试用例:176 / 176

var findDuplicateSubtrees = function(root) {const seen = new Map();const repeat = new Set();let idx = 0;const dfs = (node) => {if (!node) {return 0;}const tri = [node.val, dfs(node.left), dfs(node.right)];const hash = tri.toString();if (seen.has(hash)) {const pair = seen.get(hash);repeat.add(pair[0]);return pair[1];} else {seen.set(hash, [node, ++idx]);return idx;}}dfs(root);return [...repeat];
};

执行结果:通过

执行用时:80 ms, 在所有 JavaScript 提交中击败了98.28%的用户

内存消耗:48.3 MB, 在所有 JavaScript 提交中击败了70.10%的用户

通过测试用例:176 / 176

参考链接

652. 寻找重复的子树 - 力扣(LeetCode)

寻找重复的子树 - 寻找重复的子树 - 力扣(LeetCode)

[Python/Java/TypeScript/Go] DFS节点编号 - 寻找重复的子树 - 力扣(LeetCode)

数据结构与算法之LeetCode-652. 寻找重复的子树 - 力扣(1024程序员节)相关推荐

  1. LeetCode 652. 寻找重复的子树(DFS)

    1. 题目 给定一棵二叉树,返回所有重复的子树.对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可. 两棵树重复是指它们具有相同的结构以及相同的结点值. 示例 1:1/ \2 3/ / \4 ...

  2. 9.9 力扣652. 寻找重复的子树

    652. 寻找重复的子树 - 力扣(LeetCode) 给定一棵二叉树 root,返回所有重复的子树. 对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可. 如果两棵树具有相同的结构和相同的结 ...

  3. 652. 寻找重复的子树

    给定一棵二叉树,返回所有重复的子树.对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可. 两棵树重复是指它们具有相同的结构以及相同的结点值. 示例 1: 1        / \       ...

  4. 数据结构与算法之链表结构寻找p、q最近的公共祖先

    链表结构,寻找p.q最近的公共祖先 数据结构与算法之链表结构寻找p.q最近的公共祖先 链表结构,寻找p.q最近的公共祖先 问题 想法 代码 问题 设一棵二叉树的结点结构为(LLINK, INFO, R ...

  5. Python 数据结构与算法——从二分图到寻找最大排列(Maximum Permutation)

    假设现在有 8 位有着特殊癖好的人去买票看电影,其中有一部分人得到了自己喜欢的座位,但大多数人并不满意.现在的问题是,如果这些人各自都有自己喜欢的座位(喜欢的座位有重叠,这是进行最大排列的前提,否则无 ...

  6. 算法---------寻找重复的子树(Java版本)

    题目描述: 给定一棵二叉树,返回所有重复的子树.对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可.两棵树重复是指它们具有相同的结构以及相同的结点值.示例 1:1/ \2 3/ / \4 2 ...

  7. LeetCode-652. 寻找重复的子树

    题目描述: 给定一棵二叉树,返回所有重复的子树.对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可. 两棵树重复是指它们具有相同的结构以及相同的结点值. 示例 1: 1/ \2 3/ / \4 ...

  8. 通俗易懂:贪心算法(二):区间问题 (力扣435无重叠区间)

    看完本文,可以顺便解决leetcode以下题目: 435.无重叠区间(中等) 一.通俗易懂的 贪心算法 |思想 (重复一次~~~) 贪心算法就是采用贪心的策略,保证每一次的操作都是局部最优的,从而使得 ...

  9. 【数据结构与算法】LeetCode面试真题,带你领略算法思想

最新文章

  1. 试图将驱动程序添加到存储区_Ubuntu 19.10IOS将捆绑NVIDIA驱动
  2. 让你的网站在IE8的兼容模式下运行
  3. 1015 德才论 (25 分)(c语言)
  4. 超好的Git学习网站
  5. php无法创建cookie,php-curl cookie无法成功创建
  6. Java并发编程系列
  7. Oracle 中伪数列ROWID
  8. 客户端渲染(CSR)
  9. 安卓pdf 控件使用说明
  10. 一文告诉你什么是领域驱动设计?
  11. java歌词解析器_Java LRC 歌词解析
  12. png 微软ppt 透明度_完美PNG半透明窗体解决方案
  13. jdk12switch表达式
  14. 计算机毕业设计 java餐厅点餐系统 餐厅管理系统 餐厅点餐系统java 餐厅预定系统 餐厅预订系统 点餐座位预定系统 餐厅后台管理系统 点餐系统 外卖点餐系统 springboot餐厅预约系统
  15. PMP中工具与技术归类
  16. 三方协议服务器不填,毕业生三方协议可以不填么
  17. 微型计算机结构认识实验,实验一 微型计算机结构认识
  18. 什么是对象切片(Object Slicing)?
  19. python中 什么意思_Python里面的这几个梗,你能回答出来吗
  20. 基于Web的校园跑腿管理系统的设计与实现

热门文章

  1. 15款最好用的腾讯短链接(url.cn接口)批量在线生成接口
  2. 国家开放大学计算机应用基础终结性考试(大作业).zip
  3. 分享 stormzhang的Andoid学习之路
  4. 真正通俗易懂的傅里叶变换讲解
  5. 圣诞邮件怎么写?收藏住~
  6. 技术管理规划-如何设定团队的目标
  7. 北美科技公司“隐藏福利”大盘点:看完我彻底酸了...
  8. 树莓派编译工作空间卡死
  9. Excel VBA编程常用语句300句
  10. [杂言] 祭奠与真正的告别