给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。
    两棵树重复是指它们具有相同的结构以及相同的结点值。
    示例 1:

    1. 1
    2. / \
    3. 2 3
    4. / / \
    5. 4 2 4
    6. /
    7. 4

    下面是两个重复的子树:

                2
         /
        4
    

    4
    

    因此,你需要以列表的形式返回上述重复子树的根结点。

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
     * };
     */
    class Solution {
    
    public:
        vector<TreeNode*> res;
        unordered_map<string, int> hashMap;
        vector<TreeNode*> findDuplicateSubtrees(TreeNode* root) {       
            traverse(root);
            return res;       
        }
    
        string traverse(TreeNode* root){
            if(root == nullptr){
                return "#";
            }
            string left = traverse(root->left);
            string right = traverse(root->right);
            string temp = left + "," + right+","+to_string(root->val);
            if(!hashMap.count(temp)){
                hashMap[temp] = 1;
            }else if(hashMap.count(temp) && hashMap[temp] == 1){
                res.push_back(root);
                hashMap[temp] += 1;
            }
    
            return temp;
        }
    };