遍历二叉树,为每个节点下的子树序列化,存入unordered_map,如果遍历到的节点序列化不在map中,就把这个节点序列化加入,记数为1,如果找到了并且记数为1就输出并把记数加一。
<这种会超时。。太菜了>
class Solution {
public:
vector<TreeNode*> findDuplicateSubtrees(TreeNode* root) {
if(!root) return {};
string str = dfsSeqCore(root);
if (map.find(str) == map.end()){
map.insert(make_pair(str, 1));
}
else if (map.find(str) != map.end() && map[str] == 1){
Result.push_back(root);
map[str]++;
}
findDuplicateSubtrees(root->left);
findDuplicateSubtrees(root->right);
return Result;
}
private:
vector<TreeNode *> Result;
unordered_map<string, int> map;
string dfsSeqCore(TreeNode *root) {
if(!root) return "#,";
string str = to_string(root->val) + ",";
str += dfsSeqCore(root->left);
str += dfsSeqCore(root->right);
return str;
}
};