def test_length(self): q = DeQueue() assert q.length() == 0 q.enqueue_back('A') assert q.length() == 1 q.enqueue_front('B') assert q.length() == 2 q.dequeue_front() assert q.length() == 1 q.dequeue_back() assert q.length() == 0
def test_enqueue(self): q = DeQueue() q.enqueue_back('B') assert q.front() == 'B' assert q.length() == 1 q.enqueue_back('C') assert q.front() == 'B' assert q.length() == 2 q.enqueue_front('A') assert q.front() == 'A' assert q.length() == 3 assert q.is_empty() is False
def _traverse_level_order_iterative(self, start_node, visit): """Traverse this binary tree with iterative level-order traversal (BFS). Start at the given node and visit each node with the given function. Running time: O(n) Why and under what conditions? Memory usage: O(n) Why and under what conditions?""" # Create queue to store nodes not yet traversed in level-order """Remove and return the item at the back of this queue,""" queue = DeQueue() queue.enqueue_front(start_node) while queue.is_empty() == False: node = queue.dequeue_front() visit(node.data) if node.left != None: queue.enqueue_back(node.left) if node.right != None: queue.enqueue_back(node.right)
def test_front_back(self): q = DeQueue() assert q.front() is None q.enqueue_back('A') assert q.front() == 'A' q.enqueue_back('B') assert q.front() == 'A' q.dequeue_front() assert q.front() == 'B' q.dequeue_back() q.enqueue_front('C') assert q.front() == 'C' q.enqueue_front('B') assert q.front() == 'B' q.enqueue_front('A') assert q.front() == 'A' assert q.back() == 'C' q.dequeue_front() assert q.front() == 'B' assert q.back() == 'C' q.dequeue_front() q.dequeue_front() assert q.front() is None assert q.back() is None
def _traverse_level_order_iterative(self, start_node, visit): """Traverse this binary tree with iterative level-order traversal (BFS). Start at the given node and visit each node with the given function. Running time: o(n) Memory usage: Based on size of level, so n/2? """ # Create queue to store nodes not yet traversed in level-order queue = DeQueue() # Enqueue given starting node queue.enqueue_back(start_node) # Loop until queue is empty while queue.length() > 0: # Dequeue node at front of queue node = queue.dequeue_front() # Visit this node's data with given function visit(node.data) # Enqueue this node's left child, if it exists if node.left: queue.enqueue_back(node.left) # Enqueue this node's right child, if it exists if node.right: queue.enqueue_back(node.right)