亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【學習打卡】第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
提交
取消