力扣(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;
};
相关推荐
Pointer Pursuit13 分钟前
C++11特性(二)
前端·c++·算法
lvwangshu15 分钟前
数位 DP 进阶
算法·动态规划
她的男孩20 分钟前
一个开源低代码框架的协作 SPI 是怎么设计的 ForgeAdmin 拆解 + 实战接入新平台
后端·算法·架构
OPEN-F1 小时前
C++20新特性精讲:概念、范围与三路比较
算法·c++20
tudousisi2221 小时前
CSP 第3题训练 Day 5|CSP202509C HTTP 头信息|Blog A
c++
@MMiL2 小时前
ST-link与J-link通俗易懂讲解
算法
RAOY的AI笔记2 小时前
GPT-6打破孪生素数猜想最新纪录:AI正在进入数学研究新时代?
人工智能·gpt·算法
Nil2082 小时前
leetcode 994腐烂的橘子
算法·leetcode·职场和发展
闻缺陷则喜何志丹2 小时前
【动态规划】P10726 [GESP202406 八级] 空间跳跃|普及+
c++·算法·动态规划·洛谷
地平线智能驾驶开发者2 小时前
模型量化入门:从浮点模型到低比特表示
算法·量化·算法工具链