题目描述:给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。
var findDuplicateSubtrees = function(root) {
const res = []
const map = new Map()
// 后序遍历,把每个节点转字符串存入map中,判断重复在放进res中
function traverse(root){
if(!root) return '#'
let left = traverse(root.left)
let right = traverse(root.right)
let str = `${left},${right},${root.val}`
let count = map.get(str)
// 重复的只存一次
if(count === 1){
res.push(root)
}
map.set(str, (count || 0) + 1)
return str
}
traverse(root)
return res
};