zoukankan      html  css  js  c++  java
  • 寻找重复的子树

    寻找重复的子树

    题目:
    给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。
    两棵树重复是指它们具有相同的结构以及相同的结点值。

    示例 1:
    在这里插入图片描述

    下面是两个重复的子树:
    在这里插入图片描述

    在这里插入图片描述
    解题思路:需要比较子树结构,那么就要想一个办法让子树结构具象化,所以想到了序列化二叉树,将树的结构变成了字符串,再用HashMap存储字符串出现的次数即子树结构出现的次数

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        //记录子树出现次数
        Map<String, Integer> map = new HashMap<>();
        List<TreeNode> res = new ArrayList<>();
        public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
            serial(root);
            return res;
        }
    
        //序列化子树
        public String serial(TreeNode root) {
            if(root == null)
                return "#";
            
            String left = serial(root.left);
            String right = serial(root.right);
            String str = root.val + "," + left + "," + right;
            int count = map.getOrDefault(str, 0);
            //每个子树只加入一次
            if(count == 1) res.add(root);
            map.put(str, count + 1);
            
            return str;
        }
    }
  • 相关阅读:
    [Angularjs]视图和路由(一)
    [Angularjs]ng-show和ng-hide
    解决UNIGUI字体太小的问题
    [FireDAC][Phys][MySQL] MySQL server has gone away
    unidbgrid列排序
    在盒子(2CCC)的日子
    咏南MORMOT中间件免费开源
    unidbgrid单元格操作
    国内安卓软件的恶劣环境
    DELPHI纤程的演示
  • 原文地址:https://www.cnblogs.com/katoMegumi/p/13917963.html
Copyright © 2011-2022 走看看