1. 程式人生 > >[LeetCode]652. Find Duplicate Subtrees找到重復樹

[LeetCode]652. Find Duplicate Subtrees找到重復樹

bsp null return fin ray duplicate string urn lee

核心思想是:序列化樹

序列化後,用String可以唯一的代表一棵樹,其實就是前序遍歷改造一下(空節點用符號表示);

一邊序列化,一邊用哈希表記錄有沒有重復的,如果有就添加,註意不能重復添加。

重點就是序列化樹,序列化得到的String可以唯一的代表一棵樹,這個思想很多題都用到了

並不是只是前序遍歷就能唯一表示一棵樹,加上結構信息就可以了。

Map<String,TreeNode> map = new HashMap<>();
    List<TreeNode> res = new ArrayList<>();
    public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
        serialize(root);
        
return res; } public String serialize(TreeNode root) { StringBuilder s = new StringBuilder(); if (root==null) { s.append("#"); s.append(","); return new String(s); } s.append(root.val); s.append(","); s.append(serialize(root.left)); s.append(serialize(root.right)); String cur
= new String(s); if (map.containsKey(cur)) { TreeNode t = map.get(cur); if (!res.contains(t)) res.add(t); } else map.put(cur,root); return cur; }

[LeetCode]652. Find Duplicate Subtrees找到重復樹