LeetCode133克隆圖

克隆圖>>>>
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

這道題就是遍歷整個圖,所以遍歷時候要記錄已經訪問點(否則就是死循環);用一個字典記錄 ,採用dfs



    public Node cloneGraph(Node node) {
        Map<Node, Node> lookup = new HashMap<>();
        return dfs(node, lookup);
    }

    //這道題就是遍歷整個圖
    //所以遍歷時候要記錄已經訪問點
    //我們用一個字典記錄

    private Node dfs(Node node, Map<Node,Node> lookup) {
        if (node == null) return null;
        //在這裏遞歸可以跳出;使用一個HashMap存儲所有已經被範文和複製的節點。HashMap中的key是原始圖中的節點,value是克隆圖中的對應節點,
        // 如果某個節點已經被訪問過,則返回其克隆圖中對應節點
        //給定邊 A - B,表示 A 能連接到 B,且 B 能連接到 A。如果對訪問過的節點不做標記,則會陷入死循環中。

        if (lookup.containsKey(node)) return lookup.get(node);


        Node clone = new Node(node.val, new ArrayList<>());

        lookup.put(node, clone);

        //在這裏不斷遞歸
        for (Node n : node.neighbors)clone.neighbors.add(dfs(n,lookup));
        return clone;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章