zoukankan      html  css  js  c++  java
  • [leetcode-652-Find Duplicate Subtrees]

    Given a binary tree, return all duplicate subtrees. For each kind of duplicate subtrees, you only need to return the root node of any oneof them.

    Two trees are duplicate if they have the same structure with same node values.

    Example 1: 

            1
           / 
          2   3
         /   / 
        4   2   4
           /
          4
    

    The following are two duplicate subtrees:

          2
         /
        4
    

    and

        4
    

    Therefore, you need to return above trees' root in the form of a list.

    思路:

    将每一个节点的左子节点的值和右结点的值都存储下来,组成一个字符串,作为索引,将对应节点保存到map里。

    string serialize(TreeNode* root,unordered_map<string,vector<TreeNode*> >& mp)
    {
      if(root==nullptr) return "";
      string s= "(" + serialize(root->left,mp) + to_string(root->val) + serialize(root->right,mp) + ")";
      mp[s].push_back(root);
      return s;
    }
    vector<TreeNode*> findDuplicateSubtrees(TreeNode* root)
    {
        unordered_map<string,vector<TreeNode*> >mp;
        vector<TreeNode*>ret;
        serialize(root,mp);
        for(auto it = mp.begin();it != mp.end();it++)
        {
          if(it->second.size() > 1) ret.push_back(it->second[0]);
        }
        return ret;
    } 

    参考:

    https://discuss.leetcode.com/topic/97601/c-clean-code

  • 相关阅读:
    MySql索引
    HashMap 底层解析
    https超文本安全传输协议
    多线程
    过滤器和拦截器
    计算机操作系统
    计算机网络
    java线程内存模型JMM
    jvm
    数据库
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/7269017.html
Copyright © 2011-2022 走看看