zoukankan      html  css  js  c++  java
  • 哈希表//寻找重复的子树

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

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

    示例 1:

            1
           / 
          2   3
         /   / 
        4   2   4
           /
          4
    

    下面是两个重复的子树:

          2
         /
        4
    

        4
    

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

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
            List<TreeNode> list = new ArrayList<>();
            if(root == null)
                return list;
            find(root, new HashMap<String, Integer>(), list);
            return list;
        }
        public String find(TreeNode root, HashMap<String, Integer> map, List<TreeNode> list){
            if(root == null)
                return "#";
            String str = root.val + "," + find(root.left,map,list) + "," + find(root.right,map,list);
            if(map.getOrDefault(str,0) == 1) list.add(root);
            map.put(str,map.getOrDefault(str,0) + 1);
            return str;
        }
    }
  • 相关阅读:
    GPS精度因子(GDOP,PDOP,HDOP,VDOP,TDOP)
    VTD专题
    使用Python的Numpy 生成随机数列表
    Win10 下使用Ubuntu子系统
    Python依赖库查找
    使用技巧
    openstreetmap算路服务搭建
    笔记
    markdownpad
    缓和曲线09正弦一波型
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602277.html
Copyright © 2011-2022 走看看