652. 寻找重复的子树

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

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

链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
let treeMap = {}
let treeList: Array<TreeNode | null> = []
function findDuplicateSubtrees(root: TreeNode | null): Array<TreeNode | null> {
treeMap = {}
treeList = []
traverse(root)
return treeList
};
function traverse(root: TreeNode) : String {
if (root === null) {
return '#'
}
const left = traverse(root.left)
const right = traverse(root.right)
const res = left + ',' + right + ',' + root.val
if (!treeMap[res]) {
treeMap[res] = 'first'
} else if (treeMap[res] === 'first') {
treeMap[res] = 'no-first'
treeList.push(root)
}
return res
}