class AnimalQueue(object): def __init__(self): self.dogs = Queue() self.cats = Queue() self.order = 0 def enqueue(self, animal): animal.order = self.order self.order += 1 if isinstance(animal, Dog): self.dogs.enqueue(animal) if isinstance(animal, Cat): self.cats.enqueue(animal) def dequeue_any(self): if self.dogs.queue_empty(): return self.dequeue_cat() elif self.cats.queue_empty(): return self.dequeue_dog() elif self.dogs.peek().order < self.cats.peek().order: return self.dequeue_dog() else: return self.dequeue_cat() def dequeue_dog(self): return self.dogs.dequeue() def dequeue_cat(self): return self.cats.dequeue()
def subtree(r1, r2): q = Queue() q.enqueue(r1) while not q.queue_empty(): x = q.dequeue() if x.key == r2.key and same_tree(x, r2): return True if x.left is not None: q.enqueue(x.left) if x.right is not None: q.enqueue(x.right) return False
def same_tree2(root1, root2): q = Queue() q.enqueue(root1) q.enqueue(root2) while not q.queue_empty(): x, y = q.dequeue(), q.dequeue() if x.key != y.key: return False if x.left is not None and y.left is not None: q.enqueue(x.left) q.enqueue(y.left) elif x.left is not y.left: return False if x.right is not None and y.right is not None: q.enqueue(x.right) q.enqueue(y.right) elif x.right is not y.right: return False return True
def exists_route_bfs(directed_graph, u, v): """Returns True if there exist a route between nodes u and v in directed_graph. Uses BFS. """ if u is v: return True for w in directed_graph: w.discovered = False q = Queue() q.enqueue(u) u.discovered = True while not q.queue_empty(): u = q.dequeue() for neighbour in u.neighbours: if not neighbour.discovered: if neighbour is v: return True q.enqueue(neighbour) neighbour.discovered = True return False