【二叉树】重复的子树

LeetCode 652. 寻找重复的子树

题目

给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。

两棵树重复是指它们具有相同的结构以及相同的结点值。

示例 1:

        1
       / \
      2   3
     /   / \
    4   2   4
       /
      4
下面是两个重复的子树:

      2
     /
    4


    4
因此,你需要以列表的形式返回上述重复子树的根结点。

题解

递归

var findDuplicateSubtrees = function(root) {
    const res = [];
    const hash = new Map();

    function traverse(root){
        if(root == null) return '#';

        let left_tree_str = traverse(root.left),
            right_tree_str = traverse(root.right),
            tree_str = left_tree_str+","+right_tree_str+","+root.val;

        if(hash.get(tree_str)){
            hash.set(tree_str,hash.get(tree_str)+1)
        }else{
            hash.set(tree_str,1);
        }
        if(hash.get(tree_str) === 2){
            res.push(root);
        }

        return tree_str;

    }

    traverse(root);
    return res;
};

最后更新于