# [LeetCode] Find Duplicate Subtrees 寻找重复树

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

Two trees are duplicate if they have the same structure with same node values.

Example 1:

        1
/ \
2   3
/   / \
4   2   4
/
4

The following are two duplicate subtrees:
      2
/
4

and
    4

Therefore, you need to return above trees' root in the form of a list.

class Solution {
public:
vector<TreeNode*> findDuplicateSubtrees(TreeNode* root) {
vector<TreeNode*> res;
unordered_map<string, int> m;
helper(root, m, res);
return res;
}
string helper(TreeNode* node, unordered_map<string, int>& m, vector<TreeNode*>& res) {
if (!node) return "#";
string str = to_string(node->val) + "," + helper(node->left, m, res) + "," + helper(node->right, m, res);
if (m[str] == 1) res.push_back(node);
++m[str];
return str;
}
};

https://discuss.leetcode.com/topic/97584/java-concise-postorder-traversal-solution

LeetCode All in One 题目讲解汇总(持续更新中...)

posted @ 2017-09-10 06:41  Grandyang  阅读(6182)  评论(15编辑  收藏