力扣(LeetCode)算法_C++——寻找重复的子树

给你一棵二叉树的根节点 root ,返回所有 重复的子树 。

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

如果两棵树具有 相同的结构 和 相同的结点值 ,则认为二者是 重复 的。

示例 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]

cpp 复制代码
class Solution {
public:
    vector<TreeNode*> findDuplicateSubtrees(TreeNode* root) {
        dfs(root);
        return {repeat.begin(), repeat.end()};
    }

    string dfs(TreeNode* node) {
        if (!node) {
            return "";
        }
        string serial = to_string(node->val) + "(" + dfs(node->left) + ")(" + dfs(node->right) + ")";
        if (auto it = seen.find(serial); it != seen.end()) {
            repeat.insert(it->second);
        }
        else {
            seen[serial] = node;
        }
        return serial;
    }

private:
    unordered_map<string, TreeNode*> seen;
    unordered_set<TreeNode*> repeat;
};
相关推荐
高亦真2 分钟前
今天是学习嵌入式的第37天
linux·学习·算法
软件课代表CiCi15 分钟前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
蒸蒸yyyyzwd2 小时前
从面经中学到的三件事
c++·笔记
时时三省2 小时前
【时时三省】计算机c语言二级考试选择题重点
c++
罗西的思考2 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 --- (2)--- 训练
人工智能·算法·机器学习
深圳市方中禾科技3 小时前
FZH1625 LCD 驱动芯片深度评测与实战指南
算法·led
我不会起名字3224 小时前
一天一道算法题(34):回溯法的经典例题(子集)
java·数据结构·python·算法·golang·深度优先·力扣
ThornArmor4 小时前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
huang5791475 小时前
哈希算法的抗碰撞机制与安全性增强策略4
算法
林浩杨_6 小时前
SIGIR 2026|南京大学:Video-GAR:“通过生成 Query 来验证视频语义理解”的生成增强范式
论文阅读·人工智能·算法