温哥华Shopify面试必刷题:LeetCode 133克隆图Python解法实战 | Vancouver算法挑战 ![]()
大家好!今天想和大家分享一道Shopify温哥华办公室高频面试题——**LeetCode 133克隆图(Clone Graph)**的Python解法!这道题考察图的深度遍历(DFS)和广度遍历(BFS),是面试中常见的“拦路虎”之一。![]()
题目回顾 
给定一个无向连通图的节点(Node),要求深拷贝整个图。每个节点包含val和neighbors列表,需要注意避免循环引用和重复拷贝!
解法思路 
方法一:DFS + Hashmap
class Solution:
def cloneGraph(self, node: 'Node') -> 'Node':
if not node:
return None
visited = {}
def dfs(original):
if original in visited:
return visited
copy = Node(original.val)
visited = copy
for neighbor in original.neighbors:
copy.neighbors.append(dfs(neighbor))
return copy
return dfs(node)
关键点:用哈希表记录已拷贝的节点,递归处理邻居。
方法二:BFS + Queue
from collections import deque
class Solution:
def cloneGraph(self, node: 'Node') -> 'Node':
if not node:
return None
visited = {}
queue = deque()
visited = Node(node.val)
while queue:
current = queue.popleft()
for neighbor in current.neighbors:
if neighbor not in visited:
visited = Node(neighbor.val)
queue.append(neighbor)
visited.neighbors.append(visited)
return visited
优势:避免递归栈溢出,适合大规模图。
温哥华Shopify面试小贴士 
- 沟通优先:先和面试官确认图的特性(是否有环?是否连通?)。
- 边界检查:别忘了处理空节点!

- 复杂度分析:DFS/BFS时间/空间均为O(N)。
大家有没有其他优化思路?欢迎评论区讨论!
也欢迎分享你的Shopify面试经历~ #加拿大求职 #算法刷题 #Tech面试
