寻找一颗二叉树中的重复子树,并且把重复子树加到一个list中,同一个子树只要加1次,所以遍历所有节点,然后将以它为根节点的子树加到map中,如果此时这个节点有一次,则把它加到结果列表中,如果有0次,则加到map中,超过1次就不处理。
class Solution {
Map<String,Integer> map=new HashMap<String,Integer>();
List<TreeNode> res=new ArrayList<TreeNode>();
public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
if(root==null)return null;
ToString(root);
return res;
}
public String ToString(TreeNode root){
if(root==null){
return "#!";
}
String s="";
s=s+ToString(root.left);
s=s+ToString(root.right);
s=s+root.val+"!";
int count=map.getOrDefault(s,0);
if(count==1)res.add(root);
map.put(s,count+1);
return s;
}
}