题目描述
Given a binary tree, return all duplicate subtrees. For each kind of duplicate subtrees, you only need to return the root node of any one of them.
Two trees are duplicate if they have the same structure with same node values.

题目链接
https://leetcode.com/problems/find-duplicate-subtrees/
方法思路
class Solution {
//Runtime: 13 ms, faster than 96.49%
//Memory Usage: 61.5 MB, less than 30.00%
Map<String, Integer> count;
List<TreeNode> ans;
public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
count = new HashMap();
ans = new ArrayList();
collect(root);
return ans;
}
//为什么要转换成字符串的形式再进行添加判定呢?,不是很懂。tricky!
public String collect(TreeNode node) {
if (node == null) return "#";
String serial = node.val + "," + collect(node.left) + "," + collect(node.right);
count.put(serial, count.getOrDefault(serial, 0) + 1);
if (count.get(serial) == 2)
ans.add(node);
return serial;
}
}

本文介绍了一种使用哈希映射来查找二叉树中所有重复子树的方法,并通过递归序列化子树结构来实现。该方法只需遍历一次树即可完成任务,在效率上表现优秀。
241

被折叠的 条评论
为什么被折叠?



