[LeetCode]652. Find Duplicate Subtrees找到重復樹
阿新 • • 發佈:2018-01-29
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找到重復樹