力扣(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;
};
相关推荐
徐小夕1 分钟前
我们放弃了单Agent方案:HiCAD 3.0 用 Harness 做多Agent编排,把3D建模的准确率提升了30%
前端·算法·github
洛水水5 分钟前
【力扣100题】88.多数元素
数据结构·算法·leetcode
alwaysrun8 分钟前
C++之常量体系const
c++·后端·程序员
郝学胜_神的一滴10 分钟前
CMake 016:深入浅出变量核心用法
c++·cmake
Shan120510 分钟前
无向图的Hierholzer算法流程(一)
算法
一切皆是因缘际会14 分钟前
频域特征解构底层机理与双域融合鉴伪算法优化
人工智能·算法·ai·架构
学逆向的16 分钟前
C++模板
开发语言·c++·网络安全
Smilecoc18 分钟前
决策树(三):剪枝
算法·决策树·剪枝
bIo7lyA8v22 分钟前
算法性能建模的数值方法与误差分析的技术8
算法
Smilecoc23 分钟前
决策树(四):决策树实战之鸢尾花分类
算法·决策树·分类