예제 #1
1
 def bf_traverse(self):
     q = ArrayQueue()
     if self.r != self.nil: q.add(self.r)
     while q.size() > 0:
         u = q.remove()
         if u.left != self.nil: q.add(u.left)
         if u.right != self.nil: q.add(u.right)
예제 #2
0
 def bf_traverse(self):
     q = ArrayQueue()
     if self.r != self.nil: q.add(self.r)
     while q.size() > 0:
         u = q.remove()
         if u.left != self.nil: q.add(u.left)
         if u.right != self.nil: q.add(u.right)
예제 #3
0
def queue_to_stack(queue):
    '''Convert queue to stack, without modifying the queue
    peek of the stack must be first element of the queue'''
    stack = ArrayStack()
    queue_copy = ArrayQueue(queue)

    while len(queue_copy) != 0:
        stack.push(queue_copy.remove(len(queue_copy) - 1))

    return stack
예제 #4
0
 def level_order(self, visit):
     linked_binary_tree.visit = visit
     aq = ArrayQueue()
     curr_node = self.root
     while curr_node:
         visit(curr_node)
         if curr_node.lc:
             aq.put(curr_node.lc)
         if curr_node.rc:
             aq.put(curr_node.rc)
         curr_node = aq.remove()
예제 #5
0
 def breadth_first_search(self, v, reach, label):
     aq = ArrayQueue()
     reach[v] = label
     aq.put(v)
     while not aq.is_empty():
         w = aq.remove()
         p = self.adj_list[w].first_node
         while p:
             u = p.element.v
             if not reach[u]:
                 aq.put(u)
                 reach[u] = label
             p = p.next
     print(reach)