Пример #1
0
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()
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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