数据结构与算法之LeetCode-652. 寻找重复的子树

news/2024/7/7 14:56:10

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

/**
 * 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

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)


http://www.niftyadmin.cn/n/4426637.html

相关文章

N-122基于springboot,vue网上订餐系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 前端技术 :VueElementUI 服务端技术:springbootmybatisredis 本系统分用户前台和管理后台两部分,…

ocilib操作 long raw类型的字段

1、理解long、long raw、clob、blob的区别: (1)、long用来存储可边长度“字符串”,最大长度是2GB,对于超出一定长度的文本,只能用long类型来存储,并且一个表只能包含一个long类型; (2)、long raw用于存储二进值数据,最大2GB,并且一个表只能包含一个long raw类型;…

RedLeaves和PlugX恶意软件是如何工作的?

国家网络安全和通信集成中心了解到针对各个垂直行业的多种恶意软件植入,包括RedLeaves和PlugX。这些恶意软件是如何工作的?我们该如何应对? Judith Myerson:攻击者利用系统管理员的身份启动多种恶意软件,包括RedLeaves和PlugX。它们使用开放…

ocilib操作CLOB字段

1、理解long、long raw、clob、blob的区别: (1)、long用来存储可边长度“字符串”,最大长度是2GB,对于超出一定长度的文本,只能用long类型来存储,并且一个表只能包含一个long类型; (2)、long raw用于存储二进值数据,最大2GB,并且一个表只能包含一个long raw类型;…

数据结构与算法之LeetCode-655. 输出二叉树 - 力扣(LeetCode)

655. 输出二叉树 - 力扣(LeetCode) 先构建高度 height在构建层数,根据高度和层数得到数的位置 DFS /*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val (valundefined ? 0 : val)* thi…

物联网在教育领域应用前景广阔

十年树木,百年树人,教育在人类进步中的作用不言而喻,教育的每一次变革也牵动着。随着科技的进步,教育行业的工具、运营模式等也面临着变革。不过,笔者认为,作为百年大计的一项事业,追求一夜之间…

ocilib操作BLOB类型的字段

1、理解long、long raw、clob、blob的区别: (1)、long用来存储可边长度“字符串”,最大长度是2GB,对于超出一定长度的文本,只能用long类型来存储,并且一个表只能包含一个long类型; (2)、long raw用于存储二进值数据,最大2GB,并且一个表只能包含一个long raw类型;…

ocilib操作Date字段类型

建表,模拟测试时使用: create table TEST_DIRECTPATH (VAL_INT NUMBER(8,4),VAL_STR VARCHAR2(30),VAL_DATE DATE ) 1、插入日期型数据: #include "stdafx.h" #include <iostream> #include <fstream> #include <sstream> #include "…