[leetcode]652. Find Duplicate Subtrees

[leetcode]652. Find Duplicate Subtrees


Analysis

今天开心呀,明天放假也开心呀—— [每天刷题并不难0.0]

Given a binary tree, return all duplicate subtrees. For each kind of duplicate subtrees, you only need to return the root node of any one of them.

Two trees are duplicate if they have the same structure with same node values.
在这里插入图片描述

Explanation:

递归遍历二叉树,然后在用一个hash表存一下就行了。

Implement

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<TreeNode*> findDuplicateSubtrees(TreeNode* root) {
        vector<TreeNode*> res;
        unordered_map<string, vector<TreeNode*>> mmp;
        helper(root, mmp);
        for(auto it=mmp.begin(); it!=mmp.end(); it++){
            if(it->second.size() > 1)
                res.push_back(it->second[0]);
        }
        return res;
    }
    string helper(TreeNode* node, unordered_map<string, vector<TreeNode*>>& mmp){
        if(!node)
            return "";
        string str = "("+ helper(node->left, mmp) + to_string(node->val) + helper(node->right, mmp) + ")";
        mmp[str].push_back(node);
        return str;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_32135877/article/details/85336467