Find Duplicate Subtrees 解题心得
来源:互联网 发布:win32编程是什么 编辑:程序博客网 时间:2024/06/05 12:38
Find Duplicate Subtrees 解题心得
题目:https://leetcode.com/problems/find-duplicate-subtrees/description/
题目复述
给定一二叉树,如下:
1 / \ 2 3 / / \ 4 2 4 / 4
求其重复超过两次(包括两次)的子树的根序列,例子中的重复子树为:
4 2 / 4
输出这两个子树的根节点
题目输入格式:一个树的根节点
输出:重复出现树的根序列
解题思路
暴力解法(放弃:时间复杂度过高):DFS过程中记录每个子树,同时每次在一个根节点比较已经遍历过的子树,寻找是否有相同的子树
思考用一个唯一的标识符Token
确定已经遍历得到的子树,且这个标识符是取决于树的结构,而且相同结构的子树一定有一样的这个标识符Token
,这里我们考虑使用前缀表达式(这里利用了相同结构的子树具有相同的前缀表达式),为了规避特殊情况,这里我们在遍历到空的叶子节点时用#表示,则防止不同结构的树有相同的前缀表达式的情况。
如下面两个子树
2 2 / \ 4 4
前缀表达式:24、24
加入空叶节点的表达式:24###,2#4##
因此可以通过这种方式在DFS一个子树后在根节点获得唯一确定其树结构的Token
为了记录这些Token,并且方便查找,我们可以使用map类对Token记录,并且查看是否有已经存在的Token
最后献上源码:https://github.com/zhanzongyuan/leetcode/blob/master/652_Find%20Duplicate%20Subtrees.cpp
总结
开始对于这道题的看法是希望通过某种手段利用已经记录的子树的信息,来记录上层的子树。但是后来实在想不到用什么方法,可能是因为树类的题目做的不多,没有想到用特殊处理的前缀表达式唯一表示树结构。
- Find Duplicate Subtrees 解题心得
- 652. Find Duplicate Subtrees
- 652. Find Duplicate Subtrees
- leetcode_652. Find Duplicate Subtrees
- Leetcode 652. Find Duplicate Subtrees 寻找重复子树 解题报告
- [leetcode]652. Find Duplicate Subtrees
- leetcode 652. Find Duplicate Subtrees
- Find Duplicate Subtrees问题及解法
- leetcode 652. Find Duplicate Subtrees Map记录 + 深度优先遍历DFS
- [leetcode] 287. Find the Duplicate Number 解题报告
- LeetCode 287. Find the Duplicate Number 解题报告
- 【LeetCode】287.Find the Duplicate Number解题报告
- [Leetcode] 287. Find the Duplicate Number 解题报告
- find duplicate
- [leetcode] 250. Count Univalue Subtrees 解题报告
- [Leetcode] 250. Count Univalue Subtrees 解题报告
- LeetCode217. Contains Duplicate解题
- Leetcode: find all duplicate
- sklearn与numpy的冲突问题
- javascript:使用对象保存数据
- ubuntu 执行apt-get update报错Failed to fetch
- sql语句大全
- [PHP] Mac下homebrew安装及php.mysql.nginx环境安装及配置
- Find Duplicate Subtrees 解题心得
- 关于Python2和Python3
- codeforce 360 div1 a
- linux下安装think-captcha和加密解密的类
- iOS开发网络篇 一一 SDWebImage框架的基本使用
- 链表的基本操作
- springboot实现mqtt broker启动
- Android | 应用框架
- PAT 乙级 1080. MOOC期终成绩 (25)