给定一棵二叉树
写成一坨屎了
哎
睡觉啦
class Solution {
HashSet<String> set =new HashSet<>();
List<TreeNode> lists = new ArrayList<>();
List<String> help = new ArrayList<>();
HashSet<String> set1= new HashSet<>();
HashMap<String,TreeNode> map1 = new HashMap<>();
HashMap<TreeNode,String> map2 = new HashMap<>();
public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
// 给定一棵二叉树root 返回所有重复的子树
dfs1(root);
dfs(root);
for(String str: help){
lists.add(map1.get(str));
}
return lists;
}
public String dfs1(TreeNode root){
StringBuilder sb =new StringBuilder();
if(root == null){
return "null";
}
sb.append(root.val);
sb.append("(");
sb.append(dfs1(root.left));
sb.append(")");
sb.append("(");
sb.append(dfs1(root.right));
sb.append(")");
map2.put(root,sb.toString());
map1.put(sb.toString(),root);
return sb.toString();
}
public void dfs(TreeNode root){
if(root == null){
return;
}
String temp = map2.get(root);
if(set.contains(temp)){
if(!set1.contains(temp)){
help.add(temp);
}
set1.add(temp);
}
set.add(temp);
dfs(root.left);
dfs(root.right);
}
}