Leetcode133克隆圖

題目

給定無向連通圖中一個節(jié)點的引用,返回該圖的深拷貝(克?。D中的每個節(jié)點都包含它的值 valInt) 和其鄰居的列表(list[Node])。
示例:

輸入:

{"$id":"1","neighbors":[{"$id":"2","neighbors":[{"$ref":"1"},{"$id":"3","neighbors":[{"$ref":"2"},{"$id":"4","neighbors":[{"$ref":"3"},{"$ref":"1"}],"val":4}],"val":3}],"val":2},{"$ref":"4"}],"val":1}

解釋:

節(jié)點 1 的值是 1,它有兩個鄰居:節(jié)點 2 和 4 。
節(jié)點 2 的值是 2,它有兩個鄰居:節(jié)點 1 和 3 。
節(jié)點 3 的值是 3,它有兩個鄰居:節(jié)點 2 和 4 。
節(jié)點 4 的值是 4,它有兩個鄰居:節(jié)點 1 和 3 。

思路及代碼

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> neighbors;

    public Node() {}

    public Node(int _val,List<Node> _neighbors) {
        val = _val;
        neighbors = _neighbors;
    }
};
*/
class Solution {
    public Node cloneGraph(Node node) {
        if(node == null){
            return null;
        }
        //用來記錄所有的節(jié)點情況
        Map<Integer,Node> map = new HashMap<>();
        //首先建立根節(jié)點
        int rootVal = node.val;
        Node root = new Node(rootVal,new ArrayList<Node>());
        map.put(rootVal,root);
        //在根節(jié)點利用深度優(yōu)先算法去構(gòu)建一棵樹
        copyNeighbors(node,map);
        return root;
    }

    public void copyNeighbors(Node root,Map<Integer,Node> map){
        //獲取復(fù)制后的當(dāng)前節(jié)點
        Node r = map.get(root.val);
        //遍歷他的鄰居節(jié)點
        for(Node node:root.neighbors){
            //如果鄰居節(jié)點已經(jīng)被構(gòu)建過,證明此節(jié)點之前已經(jīng)被遍歷和復(fù)制了,只需要放在其鄰居的列表中即可
            //如果沒有被構(gòu)建則需要復(fù)制構(gòu)建一次,加入索引的map中,并先對他進(jìn)行鄰居節(jié)點的復(fù)制
            Node c = map.get(node.val);
            if(c==null){
                c = new Node(node.val,new ArrayList<Node>());
                map.put(node.val,c);
                copyNeighbors(node,map);
            }
            r.neighbors.add(c);
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容