力扣(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;
};
相关推荐
qq_45239623几秒前
第十一篇:《资源管理:Requests/Limits、ResourceQuota、LimitRange》
算法·贪心算法
Tisfy4 分钟前
LeetCode 2095.删除链表的中间节点:两次遍历 / 一次遍历(快慢指针)
算法·leetcode·链表·题解·双指针
Lhan.zzZ5 分钟前
Qt Quick 嵌套 Dialog 与 ComboBox 层级混乱问题解决
c++·qt
Irissgwe11 分钟前
AVL树详解
数据结构·c++·算法·二叉树·c·二叉搜索树·avl
剑锋所指,所向披靡!18 分钟前
进程间通信IPC
c++
凌波粒18 分钟前
LeetCode--131.分割回文串(回溯算法)
算法·leetcode·职场和发展
小小晓.21 分钟前
零基础C++小白突破
开发语言·c++
阿i索30 分钟前
【C++学习笔记】【基础】4.string类(2)——模拟实现
c++·笔记·学习
北域码匠41 分钟前
奇偶归并排序:并行计算的排序利器
数据结构·算法·c#·排序算法
我不是懒洋洋42 分钟前
从零实现一个消息队列:生产消费与持久化
c++