LeetCode 暑期打卡第七周题四
题目:
给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。
两棵树重复是指它们具有相同的结构以及相同的结点值。
本身不擅长树的处理,好在前几周的题目训练过搜索。
思路遍历整个树,利用哈希表存储,实现并不难,具体看代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
List<TreeNode> ans = new ArrayList<>();
Map<String, Integer> map = new HashMap<>();
public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
if (root == null) return ans;
dfs(root);
return ans;
}
private String dfs(TreeNode node) {
if (node == null) return "";
String temp = node.val + " " + dfs(node.left) + " " + dfs(node.right);
if (map.get(temp) != null && map.get(temp) == 1) ans.add(node);
map.put(temp, map.getOrDefault(temp, 0) + 1);
return temp;
}
}
时间复杂度 O(n)