题目
给定一棵二叉树 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]]
解题
方法一:序列化成字符串+哈希表
class Solution { public: unordered_map<string,int> mp; vector<TreeNode*> res; string traversal(TreeNode* root){ if(!root) return "#"; string str=to_string(root->val)+' '+traversal(root->right)+' '+traversal(root->left); if(mp[str]==1) res.push_back(root); mp[str]++; return str; } vector<TreeNode*> findDuplicateSubtrees(TreeNode* root) { traversal(root); return res; } };