0652. Find Duplicate Subtrees
Last updated
Last updated
**Input:** root = [1,2,3,4,null,2,4,null,null,4]
**Output:** [[2,4],[4]]**Input:** root = [2,1,1]
**Output:** [[1]]**Input:** root = [2,2,2,3,null,3,null]
**Output:** [[2,3],[3]]class Solution {
List<TreeNode> duplicate;
Map<String, Integer> map;
public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
duplicate = new ArrayList<>();
map = new HashMap<>();
process(root);
return duplicate;
}
private String process(TreeNode node) {
if (node == null) return "#";
// String concatation is O(n), so overall is O(n^2)
String hash = node.val + "," + process(node.left) + "," + process(node.right);
map.put(hash, map.getOrDefault(hash, 0) + 1);
if (map.get(hash) == 2) {
// Only add one node for multiple duplicate subtrees.
duplicate.add(node);
}
return hash;
}
}