652. 寻找重复的子树 - 力扣(LeetCode)

652. 寻找重复的子树 - 力扣(LeetCode)

js 复制代码
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {TreeNode[]}
 */
var findDuplicateSubtrees = function(root) {
    const seen = new Map();
    const repeat = new Set();
    const dfs = (node) => {
        if (!node) {
            return "";
        }
        let sb = '';
        sb += node.val;
        sb += "(";
        sb += dfs(node.left);
        sb += ")(";
        sb += dfs(node.right);
        sb += ")";
        if (seen.has(sb)) {
            repeat.add(seen.get(sb));
        } else {
            seen.set(sb, node);
        }
        return sb;
    }
    dfs(root);
    return [...repeat];
};

执行结果:通过

执行用时:108 ms, 在所有 JavaScript 提交中击败了67.16%的用户

内存消耗:48.7 MB, 在所有 JavaScript 提交中击败了43.14%的用户

通过测试用例:176 / 176

js 复制代码
var findDuplicateSubtrees = function(root) {
    const seen = new Map();
    const repeat = new Set();
    let idx = 0;
    const dfs = (node) => {
        if (!node) {
            return 0;
        }
        const tri = [node.val, dfs(node.left), dfs(node.right)];
        const hash = tri.toString();
        if (seen.has(hash)) {
            const pair = seen.get(hash);
            repeat.add(pair[0]);
            return pair[1];
        } else {
            seen.set(hash, [node, ++idx]);
            return idx;
        }
    }
    dfs(root);
    return [...repeat];
};

执行结果:通过

执行用时:80 ms, 在所有 JavaScript 提交中击败了98.28%的用户

内存消耗:48.3 MB, 在所有 JavaScript 提交中击败了70.10%的用户

通过测试用例:176 / 176

参考链接

652. 寻找重复的子树 - 力扣(LeetCode)

寻找重复的子树 - 寻找重复的子树 - 力扣(LeetCode)

[Python/Java/TypeScript/Go\] DFS节点编号 - 寻找重复的子树 - 力扣(LeetCode)](https://leetcode.cn/problems/find-duplicate-subtrees/solution/pythonjavatypescriptgo-dfsshu-bian-ma-by-gna9/)

相关推荐
Hcoco_me7 分钟前
大模型面试题88:cuda core的数量 与 开发算子中实际使用的线程 关系是什么?过量线程会发生什么情况?
人工智能·深度学习·机器学习·chatgpt·职场和发展·机器人
Remember_99313 分钟前
【LeetCode精选算法】位运算专题一
java·开发语言·数据结构·leetcode·哈希算法
MicroTech202518 分钟前
微算法科技(NASDAQ :MLGO)量子生成对抗网络(QGAN)技术,为网络安全防御提供了全新的技术路径
科技·算法·生成对抗网络
YuTaoShao20 分钟前
【LeetCode 每日一题】3507. 移除最小数对使数组有序 I
算法·leetcode·职场和发展
LYS_061834 分钟前
RM赛事C型板九轴IMU解算(3)(姿态融合算法)
c语言·算法·imu·姿态解算·四元数到欧拉角
LDG_AGI37 分钟前
【机器学习】深度学习推荐系统(三十一):X For You Feed 全新推荐系统技术架构深度解析
人工智能·深度学习·算法·机器学习·架构·推荐算法
tobias.b42 分钟前
408真题解析-2010-5-数据结构-树的结点数量计算
数据结构·算法·408真题解析
chilavert31844 分钟前
技术演进中的开发沉思-329 JVM:垃圾回收(中)
java·jvm·算法
啊阿狸不会拉杆1 小时前
《机器学习》 第 9 章 - 深度强化学习
人工智能·算法·机器学习·计算机视觉·ai·ml
仰泳的熊猫1 小时前
题目 1429: 蓝桥杯2014年第五届真题-兰顿蚂蚁
数据结构·c++·算法·蓝桥杯