LeetCode 652 medium
https://leetcode-cn.com/problems/find-duplicate-subtrees/
参考:公众号 labuladong
思路
- 将二叉树序列化
- 将左右子树序列化后的结果,和根节点相加,就知道自己长什么样子
- 放到 Map 中比较,如果存在,则将根节点指针 保存一次
var findDuplicateSubtrees = function(root) {
let nodeArray = []
let nodeMap = new Map() // 创建一个对象
function traverse(root){
if(root == null){
return '#'
}
let leftStr = traverse(root.left)
let rightStr = traverse(root.right)
let rootStr = `${leftStr},${rightStr},${root.val}`
if(nodeMap.get(rootStr)){ // 用对象会出现奇怪的错误,所以这里用Map
nodeMap.set(rootStr, nodeMap.get(rootStr) + 1)
}else{
nodeMap.set(rootStr, 1)
}
if(nodeMap.get(rootStr) === 2){
nodeArray.push(root)
}
return rootStr
}
traverse(root)
return nodeArray
};
记录
- 这道题要用
new
一个Map
对象来写,用Object
来写,会有问题 - Map的使用,get set 方法