思路
问题一:如果遍历比较
- 遍历所有节点,然后两两比较。时间复杂度O(n)。一看性能就不行。
- 利用set来判断是否重复。不过有重复多次的情况,但只需返回一个重复节点,所以还需要记录count,使用map即可。
问题二:如何判断两个节点结构相同
- 通过递归,同时遍历两个节点。因为一个节点需要和多次比较,所以同一个节点需要遍历多次,性能差。
- 序列化二叉树。将二叉树遍历,转成字符串。不过需要注意
- 中序无法反序列化
- 中序的序列化是不能确定二叉树的,前序和后序就行。具体原因还没想清楚,正在LeetCode请教大佬。
题目
给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。
两棵树重复是指它们具有相同的结构以及相同的结点值。
示例 1:
代码语言:javascript复制 1
/
2 3
/ /
4 2 4
/
4
下面是两个重复的子树:
代码语言:javascript复制 2
/
4
和
代码语言:javascript复制 4
因此,你需要以列表的形式返回上述重复子树的根结点。
Related Topics
- 树
- 深度优先搜索
- 广度优先搜索
- 二叉树
-