• 图解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^)/ ~ 「干货分享,每天更新」

  • 相关阅读:
    有没有音频转文字的软件?这些软件亲测实用
    docker部署mysql nginx redis
    低代码与医疗的结合
    OP-TEE的内存和缓存管理(四):MMU的初始化和映射页表
    Canvas图形编辑器-数据结构与History(undo/redo)
    数字孪生智慧机场三维Web3D可视化运营决策系统
    无法加载文件 因为在此系统上禁止运行脚本
    关于Netty的一些问题
    《Java并发编程之美》读书笔记——第一部分(并发编程基础知识)
    autollm 指令设计
  • 原文地址:https://blog.csdn.net/qq_26470817/article/details/126699136