刷题随记 - 10. 寻找重复的子树(652)

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 方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值