652. 寻找重复的子树

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 //二叉树的序列化与反序列化
11 class Solution 
12 {
13     vector<TreeNode*> ans;
14     unordered_map<string,int> hash;
15 public:
16     vector<TreeNode*> findDuplicateSubtrees(TreeNode* root) 
17     {
18          help(root);
19          return ans;
20     }
21 
22     string help(TreeNode* root)
23     {
24         if(!root) return "#_";
25         string res = to_string(root->val) + "_";
26         res += help(root->left);
27         res += help(root->right);
28         if(++hash[res] == 2) 
29         {
30             ans.push_back(root);
31         }
32         return res;
33     }
34 };

 

posted @ 2020-04-09 18:18  Jinxiaobo0509  阅读(120)  评论(0)    收藏  举报