leetcode652 寻找重复子树

186 阅读1分钟

一 题目

二 代码

let findDuplicateSubtrees = function(root){
    //借助map存储所有子树序列,并计数
    let map={};
    //存放重复子树
    let res=[];
    //定义helper函数递归解决问题,序列化子树为字符串,判断map中是否有该字符串
    let helper=function(root){
        //空节点用#表示
        if(!root) return "#";
        //递归调用,得到所有字符串
        let subString=helper(root.left)+','+helper(root.right)+','+root.val.toString();
        if(map[subString]===1){
            //如果map中有该字符串,将该子树放入res的中
            res.push(root);
            map[subString]+=1;
        }else if(!map[subString]){
            map[subString]=1;
        }
        return subString;
    }
    helper(root);
    return res;
}