LeetCode-652. 寻找重复的子树

leetcode — 652. 寻找重复的子树 给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。 两棵树重复是指它们具有相同的结构以及相同的结点值。 示例 1: 1 / \ 2 3 / / \ 4 2 4 / 4 下面是两个重复的子树: 2 / 4 和 4 因此,你需要以列表的形式返回上述重复子树的根结点。 题目给出了一棵二叉树 返回树中 阅读详情

题目描述:

给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。

两棵树重复是指它们具有相同的结构以及相同的结点值。

示例 1:

     1
       / \
      2   3
     /   / \
    4   2   4
       /
      4

下面是两个重复的子树:

      2
     /
    4

和

    4

因此,你需要以列表的形式返回上述重复子树的根结点。

思路分析;

  • 首先解决如何寻找重复的问题,要找重复的子树,如果重复了就保存一个树的根节点。这已经提示我们,遍历整棵树的所有节点,遍历的时候我们想办法得到以这个结点为根的子树的情况是什么样子的,显然用序列化二叉树,如何记录重复?这里我想到用哈希如果对应子树的序列出现次数超过1次那么就重复了,需要在结果中加入该子树的根结点。
  • 再就是如何遍历树?我们知道树分三种遍历方式:前序,中序和后序,这三种都是深度优先搜索DFS。当然还有层次遍历,不过这个属于广度优先搜索BFS理论上讲这4种遍历方式都是可行的,因为按照我们对问题的分析,我们仅仅只需要遍历整棵树的结点,但从遍历来讲,这几种方法都是可以达到目的的。
  • 如何序列化二叉树?我们知道要想序列和二叉树一一对应,只有前序序列和后序序列才可以。按照序列化的模板就OK啦,返回一个string类型的字符串,各个结点用逗号隔开,空指针用#表示。

代码实现:

class Solution {
    HashMap<String,Integer> memo=new HashMap<>();
    LinkedList<TreeNode> res=new LinkedList<>();
    public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
        traverse(root);
        return res;

    }
    String traverse(TreeNode root){
        if(root==null){
            return "#";
        }
        String left=traverse(root.left);
        String right=traverse(root.right);
        String subTree=left+","+right+","+root.val;
        
        
        int freq=memo.getOrDefault(subTree,0);
        if(freq==1){
            res.add(root);
        }
        memo.put(subTree,freq+1);
        return subTree;
    }
}

 

LeetCode652 寻找重复的子树 题目描述:给定一棵二叉树 root,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。如果两棵树具有相同的结构和相同的结点值,则它们是重复的。 分析:要寻找重复的子树,我们可以首先获取每一个节点的子树,然后将这些子树进行对比判断,如果重复则加入链表中。如何判断两个子树的结构相等,可以引入map进行判断,先将一个子树的值存入map中,然后再分别将每一个子树存入map中,如果存入的时候发现以前存过,则将这个节点放入链表中,这样不断的循环。 知识点:hashmap相关知识 Map 阅读详情

相关推荐

SoC芯片时钟树优化实战:如何用分段CTS解决DDRPHY与Memory Controller的时序难题

本文深入探讨了SoC芯片时钟树优化中的分段CTS技术,重点解决DDRPHY与Memory Controller之间的时序难题。通过分析多域时钟架构的复杂性,提出三级分段CTS策略,并结合28nm移动SoC实战案例,展示如何通过Guide Buffer插入和本地段重构实现72%的跨域偏差改善。文章还涵盖5nm以下工艺的线阻变异、热梯度效应等特殊考量,为数字IC设计提供时钟树综合的高阶解决方案。

kkk56的博客 905

leetcode刷题笔记-652. 寻找重复的子树(java实现)

leetcode刷题笔记-652. 寻找重复的子树(java实现)

成钰的博客 370

验证(uvm常见问题)--子类和父类的句柄和对象问题

sv中的子类和父类 在sv中,有如下两个类,child继承于parent。然后在test module中,正确转换的方法如下面所示。其中c1,c2,p1 都指向了同一个子类的对象c1。总结如下: 一个子类的对象是包括子类的成员变量,方法和父类的成员变量,方法。 子类的句柄c1可以直接赋值给父类的句柄p1,此时p1只可以访问父类的成员变量和方法,或者子类的虚方法,比如下面调用p1.display是...

q876507447的博客 7631

算法题 寻找重复的子树

本文提出了一种寻找二叉树中重复子树的算法。通过后序遍历和序列化技术,将每个子树转换为唯一的字符串表示,并使用哈希表统计各子树出现的次数。当某种子树第二次出现时,将其根节点加入结果列表。算法时间复杂度为O(N²),空间复杂度为O(N²),其中N为节点数。测试用例验证了算法能正确识别重复子树结构,如示例中[2,4]和[4]两棵重复子树。该方法高效解决了二叉树结构重复检测问题。

红血哥 281

告别臃肿!保姆级教程:用NTLite深度精简Win10,打造你的专属纯净系统(附完整组件移除清单)

本文提供了一份详细的NTLite教程,帮助用户深度精简Windows10系统,移除冗余组件并优化性能。从准备工作到组件移除清单,再到系统配置优化和无人值守安装,逐步指导用户打造专属纯净系统。附完整组件移除清单和实战经验,确保系统稳定高效运行。

weixin_30945039的博客 855

关于海康网络摄像头使用VLC或者Opencv拉流有延迟的问题

先说结论,我用VLC或者Pyhton opencv直接拉取海康网络摄像头的rtsp流,会有1-2s延时,特别明显。环境:Windows + VLC / Openc-Python。如上面文章介绍,我使用的时候遇到一处错误,需要把代码中的。海康SDK:与网页视频相比,几乎是同步的。上面说的延时,也是与摄像头网页视频相比的。ffplay 去掉缓存:延时1s左右。这两处地方改成左斜杠,才能运行。opencv拉流使用的是。多线程:延时1s左右。

yljxh的博客 4498

leetcode814. 二叉树剪枝(java)

递归完成后,当这三个条件:左子树为空,右子树为空,当前节点的值为 0,同时满足时,才表示以当前节点为根的原二叉树的所有节点都为 0,需要将这棵子树移除,返回空。输入:root = [1,1,0,1,1,0,1,0]输入:root = [1,0,1,0,0,0,1]输入:root = [1,null,0,0,1]返回移除了所有不包含 1 的子树的原二叉树。输出:[1,1,0,1,1,null,1]输出:[1,null,0,null,1]输出:[1,null,1,null,1]来源:力扣(LeetCode)

SP_1024的博客 573

(秋招复习)一些SLAM基础

秋招复习--SLAM基础知识篇

weixin_45432823的博客 768

子树的权重java,树的权重

时间限制:10000ms单点时限:1000ms内存限制:256MB描述给定一棵包含N个节点的树,节点编号1~N。请你对于每一个节点,计算它到所有其他节点的距离之和。(每条边的长度为1)输入第一行包含一个整数N。以下N-1行,每行包含两个整数a和b,代表ab之间有一条边。对于30%的数据,1 ≤ N ≤ 1000对于100%的数据,1 ≤ N ≤ 100000输出输出N行,依次对于1~N号节点输出答...

weixin_39786534的博客 492

3.1 5分钟搞定!Claude Code接入国产大模型完整教程(附代码)

摘要 本文提供了一份5分钟快速为Claude Code接入国产大模型的完整教程。首先介绍了系统环境要求(Windows/macOS/Linux、Node.js 18+、Python 3.8+),然后详细说明了三种安装Claude Code的方式(npm/yarn/pnpm)。重点讲解了两种国产大模型接入方案:通义千问(推荐)和文心一言,包括获取API密钥、安装SDK、创建MCP服务器、配置Claude Code等步骤。文中提供了详细的代码示例和配置文件模板,确保开发者能快速完成国产大模型的接入,降低使用成本

yonggeit的博客 7924

130页5万字某市档案馆数字档案馆建设方案

【版权声明】本资料来源网络,仅用于行业知识分享,供个人学习参考,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间进行删除!完整资料领取见文末,部分资料内容:国家档案局证实颁布《数字档案馆建设指南》, 明确了数字档案馆建设原则、要求、目标,对相关系统建设内容、功能要求进行了概括和详细说明。数字档案馆系统建设应以 OAIS&nbsp;参考模型为设计基础,以实现数字资源的长期保存与可信管理。设计的数字档案馆系统架构如下图。图-1 数字档案馆体系结构数字档案馆建设包括五大层次和三大保障体系:

zuoan1993的博客 1180

子树的权重java,Huffman编码树的Java实现

Huffman编码为字母分配编码,代码长度取决于对应的字母的相对使用频率或者“权”,因此它是一种变长编码。每个字母的Huffman编码是从称为Huffman编码树或简称Huffman树的满二叉树中得到。Huffman树中每个叶子结点对应一个字母,叶结点的权重就是它对应字母的出现频率。其目的在于按照最小外部权重建立一棵树。首先,定义一个Huffman结点的接口,以反映Huffman树结点所应有的信息...

weixin_39673947的博客 222

ESP32设备驱动-MLX90393磁场传感器驱动

MLX90393 磁场传感器可以在运行时重新编程为不同的模式和不同的设置。 该传感器使用 Melexis 专有的 Triaxis® 技术提供与沿 XYZ 轴感应的磁通密度成比例的 16 位输出,还提供温度输出信号。 这些数字值可通过 I2C 和 SPI 获得,其中 MLX90393 是总线上的从设备。

视觉与物联智能 2350

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) {} *

s_Shune 244

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

执行结果:通过执行用时:108 ms, 在所有 JavaScript 提交中击败了67.16%的用户内存消耗:48.7 MB, 在所有 JavaScript 提交中击败了43.14%的用户通过测试用例:176 / 176执行结果:通过执行用时:80 ms, 在所有 JavaScript 提交中击败了98.28%的用户内存消耗:48.3 MB, 在所有 JavaScript 提交中击败了70.10%的用户通过测试用例:176 / 176。

Three_ST的博客 213

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Leetcode 652. 寻找重复的子树 C++

Leetcode 652. 寻找重复的子树 题目 给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。 两棵树重复是指它们具有相同的结构以及相同的结点值。 示例: 1 / \ 2 3 / / \ 4 2 4 / 4 下面是两个重复的子树: 2 / 4 和 4 因此,你需要以列表的形式返回上述重复子树的根结点。 题解 后序

weixin_43750513的博客 603

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

leetcode652. 寻找重复的子树

leetcode652. 寻找重复的子树 给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。 两棵树重复是指它们具有相同的结构以及相同的结点值。 示例 1: 1 / \ 2 3 / / \ 4 2 4 / 4 下面是两个重复的子树: 2 / 4 和 4 因此,你需要以列表的形式返回上述重复子树的根结...

peony的博客 199

leetcode652 寻找重复的子树

labuladong 如何判断我们应该用前序还是中序还是后序遍历的框架? 还是那句话,根据题意,思考一个二叉树节点需要做什么,到底用什么遍历顺序就清楚了。 题目链接: leetcode652 寻找重复的子树 本题思路: 如果你想知道以自己为根的子树是不是重复的,是否应该被加入结果列表中,你需要知道什么信息? 你需要知道以下两点: 1、以我为根的这棵二叉树(子树)长啥样?使用「后序遍历」框架,通过拼接字符串把二叉树序列化 2、以其他节点为根的子树都长啥样?借助HashMap,存每个节点的子树的序列化结果以.

去创造 211

leetcode 652. 寻找重复的子树

leetcode 652. 寻找重复的子树题目描述解决方案 题目描述 解决方案 使用序列化的方式解决 一种朴素的方法是,将每个节点为根的子树都保存下来,之后进行比较就可以得到最终的结果。但是保存如何保存一棵树是一个难点。一种解决方法是我们将树的值按照先序遍历的的方式保存到字符串中,就是序列化。 有了这个概念之后,我们就可以将每个子树的序列化结果保存到哈希表中,通过比较子树序列化的结果来找到重复的子树。 我们可以使用递归的方式进行树的序列化,并在递归的过程中保存从叶子到根的子树序列化值,可以减少计算重复的次

Hydralisk2333的博客 207

LeetCode刷题复盘笔记—652. 寻找重复的子树

LeetCode刷题复盘笔记—652. 寻找重复的子树,判断两个子树是否重复!本题可以借助二叉树序列化的方法——把二叉树转化成字符串,每一个子树对应一个字符串,只要判断字符串是否重复,就可以知道子树是否重复,这里可以借助哈希表来判断是否重复,而且这一道题还要求输出结果不能重复:“对于同一类的重复子树,你只需要返回其中任意 一棵 的根结点即可。”所以最终考虑使用unordered_map,记录每个字符串重复次数, 只有当键值对的值为1(当前只重复1次时)时才加入到最终的输出结果中!

Lucky_Alan_Gareth的博客 295

LeetCode 652——寻找重复的子树

一、题目介绍 给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。 两棵树重复是指它们具有相同的结构以及相同的结点值。 示例 1: 下面是两个重复的子树: 和 4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-duplicate-subtre...

Asher 498

【leetcode-652】寻找重复的子树

【leetcode-652】寻找重复的子树 题目描述 给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。 两棵树重复是指它们具有相同的结构以及相同的结点值。 题解 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {}

JasonLee实时计算 5353

LeetCode——652 寻找重复的子树

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

优快云的博客 345

LeetCode 652 寻找重复的子树

题目: 给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。 两棵树重复是指它们具有相同的结构以及相同的结点值。 示例 1: 1 / \ 2 3 / / \ 4 2 4 / 4 下面是两个重复的子树: 2 / 4 和 4 来源:力扣(LeetCode) 链接:https://leetcode-cn...

yzhang的博客 229

leetcode-652:寻找重复的子树

对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。如果两棵树具有相同的结构和相同的结点值,则它们是重复的。给定一棵二叉树 root,返回所有重复的子树。

菊头蝙蝠的博客 216

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

寻找重复的字数

Three_ST的博客 355
上一篇: LeetCode-1052:爱生气的书店老板
下一篇: maven配置报错以及The JAVA_HOME environment variable is not defined correctly的解决方法
小小谢先生
博客等级 码龄11年 1万+粉丝 317原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小谢先生

支持知识付费

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值