为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第21天 数据结构和算法

克隆图(leetcode - 133)

给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。
图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。

思路

  • 拷贝所有节点
  • 拷贝所有边

步骤

  1. 深度或者广度优先遍历所有节点
  2. 拷贝所有节点,存储起来
  3. 将拷贝的节点,按照原图的连接方式进行连接
深度优先遍历
/**
 * @param {Node} node
 * @return {Node}
 */
var cloneGraph = function(node) {
    if(!node) return;
    const map = new Map()
    const bfs = (node) => {
        const nCopy = new Node(node.val);
        map.set(node, nCopy);
        (node.neighbors || []).forEach(n => {
            if(!map.has(n)) {
                bfs(n)
            }
            nCopy.neighbors.push(map.get(n))
            
        })
    }
    bfs(node)
    return map.get(node)
};

时间复杂度:O(n)
空间复杂度:O(n)

广度优先遍历
var cloneGraph = function(node) {
    if(!node) return;
    const map = new Map()
    const q = [node]
    map.set(node, new Node(node.val))
    while(q.length) {
        const n = q.shift();
        (n.neighbors || []).forEach(c => {
            if(!map.has(c)) {
                q.push(c)
                map.set(c, new Node(c.val))
            }
            
            map.get(n).neighbors.push(map.get(c))
            
        })
    }
    return map.get(node)
};

时间复杂度:O(n)
空间复杂度:O(n)

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
3
获赞与收藏
9

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消