def levelorderWalk(self): if self.root == None: print('empty tree') else: q = Queue() q.enqueue((self.root, 0)) # (node, depth) depth_hash = {} depth_hash[0] = [(self.root.val, None)] #(node, parent) while not q.isempty(): node_tuple = q.dequeue() n = node_tuple[0] # node object d = node_tuple[1] # depth value if not n.left is None: q.enqueue((n.left, d + 1)) if d+1 not in depth_hash: depth_hash[d+1] = [(n.left.val, n.val)] else: depth_hash[d+1].append((n.left.val, n.val)) if not n.right is None: q.enqueue((n.right, d + 1)) if d+1 not in depth_hash: depth_hash[d+1] = [(n.right.val, n.val)] else: depth_hash[d+1].append((n.right.val, n.val)) for k in depth_hash.keys(): print('Level '+ str(k) + ': ', end='') print(depth_hash[k])
def testQueue(): ''' Here we test algorithms for queues We test enqueue, dequeue, and checking if a queue is empty Queue is implemented as a python list It's not the best implementation as we'll show that the queue will be empty yet it will be occupying memory with the previously inserted elements ''' print('Create an empty queue') q = Queue() print('Dequeue now') print('Dequeued element: ' + str(q.dequeue())) print('Insert 5') q.enqueue(5) print('Insert 3') q.enqueue(3) print('Insert 4') q.enqueue(4) print('Is queue empty: ' + str(q.isempty())) print('Position of head: ' + str(q.head)) print('Position of tail: ' + str(q.tail)) print('Dequeue now') print('Dequeued element: ' + str(q.dequeue())) print('Dequeue now') print('Dequeued element: ' + str(q.dequeue())) print('Dequeue now') print('Dequeued element: ' + str(q.dequeue())) print('Dequeue now') print('Dequeued element: ' + str(q.dequeue())) print('Queue in the memory') print(q.storage) print('Insert 6') q.enqueue(6) print('Dequeue now') print('Dequeued element: ' + str(q.dequeue())) print('Queue in the memory') print(q.storage)
def bfs(self, s): # initialize visited, distance, parent = {}, {}, {} for v in self.V: visited[v] = 0 distance[v] = np.NaN parent[v] = None distance[s] = 0 # keep a Queue for un-visited nodes q = Queue() q.enqueue(s) while not q.isempty(): u = q.dequeue() print(u, parent[u], distance[u]) visited[u] = 1 for v in self.E[u].keys(): if not visited[v]: visited[v] = 1 distance[v] = distance[u] + self.E[u][v] parent[v] = u q.enqueue(v)