zoukankan      html  css  js  c++  java
  • [LeetCode]652. Find Duplicate Subtrees找到重复树

    核心思想是:序列化树

    序列化后,用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;
        }
  • 相关阅读:
    [VC++]轻松搞VC之定时器(Timer)
    [VC++]VC中如何获得当前系统时间
    [VC++]如何利用this获得窗口句柄
    SMART原则
    SQL配置
    术语百科
    关于SQL锁问题
    第六代OA办公理念(摘录)
    心动机型
    SQL2008R2的索引重建
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8378097.html
Copyright © 2011-2022 走看看