LeetCode 652 寻找重复的子树

128 阅读1分钟

题目描述:给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。

image.png

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
};