能够用 BFS 解决的问题,一定不要用 DFS 去做
因为用 Recursion 实现的 DFS 可能造成 StackOverflow
(NonRecursion 的 DFS 一来你不会写,二来面试官也看不懂)
1. Queue
Java常用的队列包括如下几种:
ArrayDeque:数组存储。实现Deque接口,而Deque是Queue接口的子接口,代表双端队列(double-ended queue)。
LinkedList:链表存储。实现List接口和Duque接口,不仅可做队列,还可以作为双端队列,或栈(stack)来使用。
C++中,使用<queue>中的queue模板类,模板需两个参数,元素类型和容器类型,元素类型必要,而容器类型可选,默认deque,可改用list(链表)类型。
Python中,使用collections.deque,双端队列
1 class MyQueue: 2 # 队列初始化 3 def __init__(self): 4 self.elements = [] # 用list存储队列元素 5 self.pointer = 0 # 队头位置 6 7 # 获取队列中元素个数 8 def size(self): 9 return len(self.elements)-pointer 10 11 # 判断队列是否为空 12 def empty(self): 13 return self.size() == 0 14 15 # 在队尾添加一个元素 16 def add(self, e): 17 self.elements.append(e) 18 19 # 弹出队首元素,如果为空则返回None 20 def poll(self): 21 if self.empty(): 22 return None 23 pointer += 1 24 return self.elements[pointer-1]