题目描述
给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。
两棵树重复是指它们具有相同的结构以及相同的结点值。
题目来源:LeetCode
C++代码
class Solution {
public:
map<string,vector<TreeNode*>> copysize;
vector<TreeNode*> result;
vector<TreeNode*> findDuplicateSubtrees(TreeNode* root) {
if(root!=nullptr)
{
tree(root);
for(auto i=copysize.begin();i!=copysize.end();i++)
{
if(i->second.size()>1)
result.push_back(i->second[1]);
}
}
return result;
}
string tree(TreeNode* node)
{
if(node==nullptr)
return "N";
string left=tree(node->left);
string right=tree(node->right);
string s=to_string(node->val)+left+right;
copysize[s].push_back(node);
return s;
}
};