力扣133. 克隆图

深度优先遍历

  • 思路:
    • 使用一个哈希表存储已经被克隆过的节点,key 为原节点,value 为克隆的节点;
    • 从原节点开始遍历,如果已经被克隆过,则回到其克隆节点;
    • 否则,克隆该节点,并存入哈希表中;
    • 然后,根据其邻居节点依次递归遍历;
cpp 复制代码
/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> neighbors;
    Node() {
        val = 0;
        neighbors = vector<Node*>();
    }
    Node(int _val) {
        val = _val;
        neighbors = vector<Node*>();
    }
    Node(int _val, vector<Node*> _neighbors) {
        val = _val;
        neighbors = _neighbors;
    }
};
*/

class Solution {
public:
    Node* cloneGraph(Node* node) {
        if (node == nullptr) {
            return node;
        }

        if (visited.find(node) != visited.end()) {
            return visited[node];
        }

        Node* cloneNode = new Node(node->val);
        visited[node] = cloneNode;

        for (auto& neighbor: node->neighbors) {
            cloneNode->neighbors.emplace_back(cloneGraph(neighbor));
        }

        return cloneNode;
    }

private:
    std::unordered_map<Node*, Node*> visited;
};
相关推荐
却话巴山夜雨时i17 分钟前
394. 字符串解码【中等】
java·数据结构·算法·leetcode
haing201918 分钟前
使用黄金分割法计算Bezier曲线曲率极值的方法介绍
算法·黄金分割
leoufung24 分钟前
LeetCode 230:二叉搜索树中第 K 小的元素 —— 从 Inorder 遍历到 Order Statistic Tree
算法·leetcode·职场和发展
jyyyx的算法博客27 分钟前
多模字符串匹配算法 -- 面试题 17.17. 多次搜索
算法
da_vinci_x29 分钟前
Sampler AI + 滤波算法:解决 AIGC 贴图“噪点过剩”,构建风格化 PBR 工业管线
人工智能·算法·aigc·材质·贴图·技术美术·游戏美术
惊鸿.Jh31 分钟前
503. 下一个更大元素 II
数据结构·算法·leetcode
chao18984436 分钟前
MATLAB 实现声纹识别特征提取
人工智能·算法·matlab
zhishidi39 分钟前
推荐算法之:GBDT、GBDT LR、XGBoost详细解读与案例实现
人工智能·算法·推荐算法
货拉拉技术40 分钟前
货拉拉RAG优化实践:从原始数据到高质量知识库
数据库·算法
测试界茜茜1 小时前
独立搭建UI自动化测试框架分享
自动化测试·软件测试·功能测试·程序人生·ui·职场和发展