leetcode 133 clone-graph 克隆图(图的遍历算法)

题目描述


克隆一个无向图. 图中每个节点包括一个 label 和一个放置其邻居的 list.

节点结构体定义如下:
class UndirectedGraphNode {
	int label;
	ArrayList neighbors;

	UndirectedGraphNode(int x) {
		label = x;
		neighbors = new ArrayList();
	}
}
比如:

       1
      / \
     /   \
    0 --- 2
         / \
         \_/


题目分析

本题考察的是图的遍历,BFS和DFS

BFS ,Java实现,借助队列

public class Solution {
    public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
        
        Map map = new HashMap();
        //队列,放置遍历的节点
        Queue nodeQueue = new LinkedList();
        nodeQueue.offer(node);
        
        while(nodeQueue.size() != 0){
            
            UndirectedGraphNode tempNode = nodeQueue.poll();
            if(map.containsKey(tempNode)) continue;
            UndirectedGraphNode copyNode = new UndirectedGraphNode(tempNode.label);
            
            for(UndirectedGraphNode unode : tempNode.neighbors){
                copyNode.neighbors.add(unode);
                if(map.containsKey(node)) continue;
                nodeQueue.offer(unode);
            }
            map.put(tempNode,copyNode);
        }
        
        return map.get(node);
    }  
}

DFS,java实现,借助栈,其实与BFS及其类似,只是借助了栈进行遍历之后,顺序不同而已

public class Solution {
    public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
        
        if(node == null) return null;
        
        HashMap map = new HashMap();
        //栈,放入遍历的节点
        Stack nodeStack = new Stack();
        nodeStack.push(node);
        
        while(!nodeStack.empty()){
            
            UndirectedGraphNode tempNode = nodeStack.pop();
            if(map.containsKey(tempNode)) continue;
            UndirectedGraphNode copyNode = new UndirectedGraphNode(tempNode.label);
            
            for(UndirectedGraphNode unode : tempNode.neighbors){
                copyNode.neighbors.add(unode);
                if(map.containsKey(node)) continue;
                nodeStack.push(unode);
            }
            map.put(tempNode,copyNode);
        }
        
        return map.get(node);
    }
}


你可能感兴趣的:(leetcode)