• 图解LeetCode——652. 寻找重复的子树(难度:中等)


    一、题目

    给定一棵二叉树 root,返回所有重复的子树

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

    如果两棵树具有相同的结构相同的结点值,则它们是重复的。

    二、示例

    2.1> 示例 1:

    【输入】root = [1,2,3,4,null,2,4,null,null,4]
    【输出】[[2,4],[4]]

    示例 2:

    【输入】root = [2,1,1]
    【输出】[[1]]

    示例 3:

    【输入】root = [2,2,2,3,null,3,null]
    【输出】[[2,3],[3]]

    提示:

    • 树中的结点数在[1,10^4]范围内。
    • -200 <= Node.val <= 200

    三、解题思路

    根据题意,我们要找出重复的子树,那么,就需要我们针对给出的树进行遍历,来统计这个树是由哪些子树构成的。所以,基于这种解题思路,我们首先采用深度优先遍历方式,对树中的每个节点进行遍历,每当遍历一个子树的时候,我们就将该子树存储到哈希表中,我们这里采用的是Map,其中key存储的是前序/后续拼装的树的字符串(每个节点以“/”分割),value存储的是遍历子树过程中,相同子树出现的个数。那么,为了排重,当且仅当出现了第2次的时候,才放入到待返回的变量List result。最终,将result作为结果返回即可。具体操作如下图所示:

    那么,在上面的描述中,我们在将子树转化为字符串的时候,指出可以采用前序或后续遍历,为什么不能采用中序遍历呢?请看下面的图示,当我们采用中序遍历的时候,我们发现,针对树A和树B,转换后的结果(不同节点,我们采用“/”分割)是相同的,但是树A和树B却不是重复的子树。be838f86ed8dc63655b365a744b51b84.png

    好了,以上就是基本的解题思路了。具体的代码实现,请参照:代码实现 部分

    四、代码实现

    1. class Solution {
    2.     Map<String, Integer> map = new HashMap();
    3.     List<TreeNode> result = new ArrayList();
    4.     public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
    5.         dfs(root);
    6.         return result;
    7.     }
    8.     public String dfs(TreeNode node) {
    9.         if (node == nullreturn "";
    10.         String key = new StringBuilder().append(node.val).append(",").append(dfs(node.left)).append(",").append(dfs(node.right)).toString();
    11.         if (map.getOrDefault(key0== 1) result.add(node);
    12.         map.put(key, map.getOrDefault(key0+ 1);
    13.         return key;
    14.     }
    15. }

    今天的文章内容就这些了:

    写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

    更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

  • 相关阅读:
    < Python全景系列-5 > 解锁Python并发编程:多线程和多进程的神秘面纱揭晓
    安防视频/视频汇聚平台EasyCVR使用onvif探测添加设备通道详细步骤来啦!
    【linux多线程】查看进程的所有线程/活跃线程
    Elasticsearch高级之-集群搭建,数据分片
    Java面试很难?啃完阿里老哥这套Java架构速成笔记,我都能拿30K
    python基础语法--列表
    [C数据结构]顺序栈
    打电话用蓝牙耳机什么牌子好?打电话清晰的蓝牙耳机推荐
    Docker初探
    Spring实战系列(二)Bean装配
  • 原文地址:https://blog.csdn.net/qq_26470817/article/details/126699136