package com.算法专练.力扣.寻找重复的子树;
import java.util.*;
/**
* @author xnl
* @Description:
* @date: 2022/9/5 23:14
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
TreeNode node = new TreeNode(1, new TreeNode(2, new TreeNode(4), null),
new TreeNode(3, new TreeNode(2, new TreeNode(4), null), new TreeNode(4)));
System.out.println(solution.findDuplicateSubtrees(node));
}
/**
* 使用hash,序列化字符串
* @param root
* @return
*/
Map<String,TreeNode> map = new HashMap<>();
Set<TreeNode> set = new HashSet<>();
public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
dfs(root);
return new ArrayList<>(set);
}
private String dfs(TreeNode node){
if (node == null){
return "";
}
StringBuilder sb = new StringBuilder();
sb.append(node.val);
sb.append("(");
sb.append(dfs(node.left));
sb.append(")(");
sb.append(dfs(node.right));
sb.append(")");
String serial = sb.toString();
if (map.containsKey(serial)){
set.add(map.get(serial));
} else {
map.put(serial, node);
}
return serial;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
相关推荐
SAP 财务快速记账之—G/L Item Fast Entry
SAP FICO 运维解决方案
LeetCode 652:寻找重复的子树
目录LeetCode 652:寻找重复的子树题目描述解题 LeetCode 652:寻找重复的子树 题目描述 解题 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} *
运算放大器测试方法-输入失调电压
由于运放输入回路的不对称性,在输入端将产生一定的误差信号,从而限制运放信号灵敏度。通常用输入失调电压(VOS)、输入失调电流(Ios)和输入偏置电流(IB)表示。运放有四个主要特征:输入失调特征、开环特征、共模特征及输出特征。其放大倍数较大,由于外界的影响,即使运放的输入端产生较小的输入信号,经过放大,在输出端也会产生较大的误差。为能精确测量其性能,一般采用辅助运放进行测试。下面着重讲了运放的主要参数及如何精确测量这些参数。文中DUT代表被测运放,A代表辅助运放。
leetcode:652. 寻找重复的子树
那么我们只要使用一个哈希表存储所有子树的序列化结果,如果某一个结果出现了超过一次,我们就发现了一类重复子树。
用 sapgenpse 把 SAPCRYPTOLIB 的 SNC 真正配通
摘要: 在SAP系统中配置SNC(Secure Network Communications)时,sapgenpse工具是关键,尤其在旧版本或组件缺乏图形化维护工具时。核心步骤包括安装SAP Cryptographic Library、创建PSE(Personal Security Environment)、生成运行凭据,并确保证书交换顺序正确。常见问题如RFC连接失败或握手错误,往往源于PSE创建或凭据配置不当。需特别注意SECUDIR目录设置、PSE身份管理(单一或独立PSE方案)、以及服务账号凭据的权
MIKE 21 教程 1.2 网格搭建界面介绍之点线面要素的高阶处理 (Mesh Generator 工具)
MIKE 21 教程 手把手教学系列 1.1 网格搭建界面介绍之点线面要素的高阶处理 (Mesh Generator 工具) 上一篇文章讲解了如何创建基本的点、线、面要素 MIKE 21 教程 1.1 网格搭建界面介绍之点线面的创建 本节来讲一下对点线面要素的高阶处理,主要包括要素修改与打断线(break line)的讲解
Leetcode 652:寻找重复子树
题目如下: 给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。 两棵树重复是指它们具有相同的结构以及相同的结点值。 示例 1: 1 / \ 2 3 / / \ 4 2 4 / 4 下面是两个重复的子树: 2 / 4 和 4 来源:力扣(LeetCode)题目链接:原题 这个题目可以让我们好好想想如何利用二叉树的前序、中序、后序遍历框架。关于各个遍历可以看:二叉树各个遍历递归非递归实现 这里我们要找出重复的
游戏引擎揭秘:大厂为何死磕自研?
游戏引擎本质与商业价值解析 游戏引擎是集成了渲染、物理、动画等核心功能的开发工具包,其价值在于让开发者免于重复编写底层代码,专注于游戏内容创作。商业引擎(如Unity/Unreal)虽降低了开发门槛,但头部厂商仍坚持自研引擎,主要基于以下考量: 经济性:长期项目分摊自研成本后,比商业引擎分成更划算; 可控性:完全掌握底层代码,能针对性优化核心玩法需求; 技术壁垒:专属引擎成为厂商的竞争优势,如米哈游的跨平台渲染技术; 项目适配:超大型游戏(开放世界/MMO)需要深度定制解决方案。 这种"短期高投入
leetcode-652:寻找重复的子树
对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。如果两棵树具有相同的结构和相同的结点值,则它们是重复的。给定一棵二叉树 root,返回所有重复的子树。
通过InoDriverShop伺服调试软件连接汇川SV660F系列伺服的具体方法示例
通过InoDriverShop伺服调试软件连接汇川SV660F系列伺服的具体方法示例
从 Open SQL JOIN 走向 ABAP CDS Association:把查询写成可复用的数据模型
摘要: 本文通过飞行模型示例,对比了ABAP中三种表关联实现方式:Open SQL JOIN、CDS显式JOIN和CDS Association。重点解析了Association的本质是将表关系声明为数据模型语言,使用时通过路径表达式按需展开为JOIN。文章指出路径表达式在不同位置会默认展开为不同JOIN类型(如SELECT列表默认为LEFT OUTER),并演示了如何用[inner]强制指定INNER JOIN。最后结合S/4HANA实际案例,说明Association通过中心化关系定义和路径复用,能有效
LeetCode 652: 寻找重复的子树 Find Duplicate Subtrees
题目: 给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。Given a ...
YOLOv13改进策略【Neck】| CVPR2024 LGAG:大核分组注意力门模块,3×3分组卷积与注意力协同的特征精准融合
本文记录的是利用LGAG 模块改进 YOLOv13 的颈部融合部分。(Large-kernel Grouped Attention Gate)通过3×3分组卷积与注意力机制结合,引导解码器处理特征与跳接特征的精准融合。本文利用模块,通过3×3分组卷积扩大感受野以捕捉更广泛局部空间上下文,同时结合注意力机制生成自适应注意力系数,对YOLOv13中关键目标特征赋予高激活值、抑制冗余背景特征,在特征融合阶段实现全局语义与局部细节的高效结合,减少计算成本的同时提升特征表达能力,增强模型对复杂场景下目标的检测精度与效
Leetcode 652:寻找重复的子树(超详细的解法!!!)
给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。 两棵树重复是指它们具有相同的结构以及相同的结点值。 示例 1: 1 / \ 2 3 / / \ 4 2 4 / 4 下面是两个重复的子树: 2 / 4 和 4...
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
LeetCode(652):寻找重复的子树 Find Duplicate Subtrees(Java)
2019.11.12 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) github:https://github.com/ChopinXBP/LeetCode-Babel 这题需要借助哈希表对已遍历的子树进行存储,为了避免重复计算,哈希表选取的key值可以选取序列化后的二叉树,通过后序遍历递归进行。 传送门:寻找重复的子树 Given a binary tree, re...
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
LeetCode:652. 寻找重复的子树
/ 指向 TreeNode 对象的指针类型。
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
java found dulicate_LeetCode 652: 寻找重复的子树Find Duplicate Subtrees
LeetCode 652: 寻找重复的子树 Find Duplicate Subtrees题目:给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。Given a binary tree, return all duplicate subtrees. For each kind of duplica...
图解LeetCode——652. 寻找重复的子树(难度:中等)
那么,在上面的描述中,我们在将子树转化为字符串的时候,指出可以采用前序或后续遍历,为什么不能采用中序遍历呢?请看下面的图示,当我们采用中序遍历的时候,我们发现,针对树A和树B,转换后的结果(不同节点,我们采用“/”分割)是相同的,但是树A和树B却不是重复的子树。根据题意,我们要找出重复的子树,那么,就需要我们针对给出的树进行遍历,来统计这个树是由哪些子树构成的。拼装的树的字符串(每个节点以“/”分割),value存储的是遍历子树过程中,相同子树出现的个数。【输出】[[2,3],[3]]
[哈希表][二叉树]leetcode652:寻找重复的子树(medium)
题目: 题解: 使用后序遍历二叉树的方法,来将子树存在hashmap中,并将子树的数量标记为1。若出现重复子树,则将该子树的根节点添加到result中。 代码如下: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNod...
leetcode:652. 寻找重复的子树【二叉树序列化锁定子树】
通过序列化锁定子树不失为一种好方法然后map和set的灵活运用这是一道hard的mid。
Leetcode652:寻找重复的子树~(对三种遍历的思考)
思路: 还是一样,拿到题目我们要思考一个二叉树节点需要做什么,到底用什么遍历顺序就清楚了。有时候我们可能搞不清楚bfs和二叉树三种遍历的区别,其实bfs就是二叉树的三种遍历方式方式类似,只是有时候bfs的树不是简单二叉树,而是变化的多叉树嘛。但是在纯二叉树的问题中,我们就考虑三种遍历方式。在本题既然是相同的结构,注意到不是相同的数值还是啥的,而是相同的子树~~既然是子树,我首先想到的是从下到上用后序遍历,注意到! 无论是前序、中序还是后序遍历,他们都是递归道最小结构然后回溯,只是顺序不同,到每个.
leetcode652. 寻找重复的子树
leetcode652. 寻找重复的子树 给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。 两棵树重复是指它们具有相同的结构以及相同的结点值。 示例 1: 1 / \ 2 3 / / \ 4 2 4 / 4 下面是两个重复的子树: 2 / 4 和 4 因此,你需要以列表的形式返回上述重复子树的根结...
Leetcode 652. 寻找重复的子树 C++
Leetcode 652. 寻找重复的子树 题目 给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。 两棵树重复是指它们具有相同的结构以及相同的结点值。 示例: 1 / \ 2 3 / / \ 4 2 4 / 4 下面是两个重复的子树: 2 / 4 和 4 因此,你需要以列表的形式返回上述重复子树的根结点。 题解 后序
刷题随记 - 10. 寻找重复的子树(652)
LeetCode 652 medium https://leetcode-cn.com/problems/find-duplicate-subtrees/ 参考:公众号 labuladong 思路 将二叉树序列化 将左右子树序列化后的结果,和根节点相加,就知道自己长什么样子 放到 Map 中比较,如果存在,则将根节点指针 保存一次 var findDuplicateSubtrees = function(root) { let nodeArray = [] let nodeMap = n
leetcode652. 寻找重复的子树(java)
输入:root = [1,2,3,4,null,2,4,null,null,4]注意:序列化可以用前序和后序,不能使用中序,因为中序出来的结果不是唯一的。如果两棵树具有 相同的结构 和 相同的结点值 ,则认为二者是 重复 的。输入:root = [2,2,2,3,null,3,null]给你一棵二叉树的根节点 root ,返回所有 重复的子树。树中的结点数在 [1, 5000] 范围内。输入:root = [2,1,1]输出:[[2,4],[4]]输出:[[2,3],[3]]相同的子树序列化后结果相同。
leetcode652 寻找重复的子树
labuladong 如何判断我们应该用前序还是中序还是后序遍历的框架? 还是那句话,根据题意,思考一个二叉树节点需要做什么,到底用什么遍历顺序就清楚了。 题目链接: leetcode652 寻找重复的子树 本题思路: 如果你想知道以自己为根的子树是不是重复的,是否应该被加入结果列表中,你需要知道什么信息? 你需要知道以下两点: 1、以我为根的这棵二叉树(子树)长啥样?使用「后序遍历」框架,通过拼接字符串把二叉树序列化 2、以其他节点为根的子树都长啥样?借助HashMap,存每个节点的子树的序列化结果以.
1647



被折叠的 条评论
为什么被折叠?



