File tree Expand file tree Collapse file tree 1 file changed +64
-0
lines changed Expand file tree Collapse file tree 1 file changed +64
-0
lines changed Original file line number Diff line number Diff line change
1
+ """
2
+ # Definition for a Node.
3
+ class Node(object):
4
+ def __init__(self, val, neighbors):
5
+ self.val = val
6
+ self.neighbors = neighbors
7
+ """
8
+ class Solution (object ):
9
+ def cloneGraph (self , node ):
10
+ """
11
+ :type node: Node
12
+ :rtype: Node
13
+ """
14
+ from collections import defaultdict , deque
15
+ record = defaultdict (list )
16
+ mapping = dict ()
17
+ def bfs (queue ):
18
+ if not queue :
19
+ return
20
+ newqueue = deque ()
21
+
22
+ while queue :
23
+ cur = queue .popleft ()
24
+ mapping [cur ] = Node (cur .val , [])
25
+ for nei in cur .neighbors :
26
+ record [cur ].append (nei )
27
+ if nei not in visited :
28
+ visited .add (nei )
29
+ newqueue .append (nei )
30
+ bfs (newqueue )
31
+
32
+ visited = {node }
33
+ q = deque ()
34
+ q .append (node )
35
+ bfs (q )
36
+
37
+ # for key, val in record.items():
38
+ # print key.val
39
+ # for item in val:
40
+ # print item.val
41
+ # print mapping
42
+ visited = {node }
43
+
44
+ def generate (queue ):
45
+ while queue :
46
+ newqueue = []
47
+ for node in queue :
48
+ if node :
49
+ # print node.val
50
+ if not record [node ]: #如果没有邻居
51
+ return
52
+
53
+ for nei in record [node ]: #处理每个邻居
54
+ mapping [node ].neighbors .append (mapping [nei ])
55
+ if nei not in visited :
56
+ visited .add (nei )
57
+ newqueue .append (nei )
58
+ queue = newqueue [:]
59
+ q = deque ()
60
+ q .append (node )
61
+ generate (q )
62
+
63
+ return mapping [node ]
64
+
You can’t perform that action at this time.
0 commit comments