力扣(LeetCode)652

栏目: 数据库 · 发布时间: 5年前

内容简介:题目地址:题目描述:

题目地址:

https://leetcode-cn.com/probl...

题目描述:

给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。

两棵树重复是指它们具有相同的结构以及相同的结点值。

示例 1:

1
   / \
  2   3
 /   / \
4   2   4
   /
  4

下面是两个重复的子树:

2
 /
4

因此,你需要以列表的形式返回上述重复子树的根结点。

解答:

如何判断两棵树是重复的?只要两棵树的先序(各种序都可以)遍历结果是一样的,那么这两棵树就是重复的?

不一定!!!

2
 /
4

2

\

4

它们的先序遍历结果就是相同的,但是并不重复。为什么?因为遍历的时候忽略掉了空树的位置。

但是如果先序访问这个树的时候保留空树(也就是访问空树),那么此时就成立了!先序遍历树并

且对它进行序列化,空树的序列化结果为" ",而对于任意节点root它的序列化结果为"root.val 左子树序列化 右子树序列化"。这里再用hashmap存储,键:序列化结果,值:树节点组成的链表。最后序列化完,遍历这个hashmap,找到hashmap中,值(链表)长度大于1的位置,把这个位置链表的第一个节点放入答案集,按照这个思路就能理解下面的代码:

java ac代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    HashMap<String,List<TreeNode>> map = new HashMap(1000);

    public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
        serialize(root);
        List<TreeNode> ans = new ArrayList(1000);
        for(Map.Entry<String,List<TreeNode>> entry:map.entrySet())
            if(entry.getValue().size()>1)
            ans.add(entry.getValue().get(0) );
        return ans;
    }
    
    public String serialize(TreeNode root)
    {
        if(root == null)return " ";
        String temp = root.val+" "+serialize(root.left)+" "+serialize(root.right);
        if(map.get(temp) == null){
            List<TreeNode> list = new LinkedList();
            list.add(root);
            map.put(temp,list);
        }
        else map.get(temp).add(root);
        return temp;
    }
    
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Haskell趣学指南

Haskell趣学指南

[斯洛文尼亚] Miran Lipovaca / 李亚舟、宋方睿 / 人民邮电出版社 / 2014-1

《haskell趣学指南》是一本讲解haskell这门函数式编程语言的入门指南,语言通俗易懂,插图生动幽默,示例短小清晰,结构安排合理。书中从haskell的基础知识讲起,涵盖了所有的基本概念和语法,内容涉及基本语法、递归、类型和类型类、函子、applicative 函子、monad、zipper及所有haskell重要特性和强大功能。 《haskell趣学指南》适合对函数式编程及haske......一起来看看 《Haskell趣学指南》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试