Esempio n. 1
0
    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])
Esempio n. 2
0
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)
Esempio n. 3
0
    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)