def bst_to_linkedlist(bst): """ Take in a binary search tree object and return a linked list of all the nodes at each depth. """ # check that the bst has at least a root node node = bst.get_root() if node is None: return # using a version of level order traversal(breadth first search) # queue up the first element queue = [[0, node]] # initialize result list result = [] # set the level for which level = 0 while len(queue) > 0: trav = queue.pop(0) if trav[1].left is not None: queue.append([trav[0] + 1, trav[1].left]) if trav[1].right is not None: queue.append([trav[0] + 1, trav[1].right]) added = False for item in result: if trav[0] == item[0]: result[trav[0]].append(trav[1].data) added = True if not added: result.append([trav[0], trav[1].data]) level += 1 # result[*][0] of every element is the level of the tree # we strip the level from each index of result linkedlist_sets = [] for item in result: item.pop(0) linkedlist = LinkedList() for value in item: linkedlist.insert(value) linkedlist_sets.append(linkedlist) # result in list format print result # result in linked list format print linkedlist_sets return linkedlist_sets # [[8], [3, 10], [1, 6, 14], [4, 7, 13]]
def linked_list_add(num1, num2): result = LinkedList() curr1 = num1.get_head() curr2 = num2.get_head() carry = False while curr1 is not None: while curr2 is not None: if carry: value = curr1.data + curr2.data + 1 else: value = curr1.data + curr2.data if value >= 10: carry = True else: carry = False result.insert(value%10) curr2 = curr2.next break curr1 = curr1.next if carry: result.insert(1) return result
def linked_list_add(num1, num2): result = LinkedList() curr1 = num1.get_head() curr2 = num2.get_head() carry = False while curr1 is not None: while curr2 is not None: if carry: value = curr1.data + curr2.data + 1 else: value = curr1.data + curr2.data if value >= 10: carry = True else: carry = False result.insert(value % 10) curr2 = curr2.next break curr1 = curr1.next if carry: result.insert(1) return result
if carry: value = curr1.data + curr2.data + 1 else: value = curr1.data + curr2.data if value >= 10: carry = True else: carry = False result.insert(value % 10) curr2 = curr2.next break curr1 = curr1.next if carry: result.insert(1) return result if __name__ == "__main__": num1 = LinkedList() num2 = LinkedList() num1.insert(1) num1.insert(2) num1.insert(3) num1.insert(4) num2.insert(5) num2.insert(6) num2.insert(7) num2.insert(8) linked_list_add(num1, num2).print_list()
while curr2 is not None: if carry: value = curr1.data + curr2.data + 1 else: value = curr1.data + curr2.data if value >= 10: carry = True else: carry = False result.insert(value%10) curr2 = curr2.next break curr1 = curr1.next if carry: result.insert(1) return result if __name__ == "__main__": num1 = LinkedList() num2 = LinkedList() num1.insert(1) num1.insert(2) num1.insert(3) num1.insert(4) num2.insert(5) num2.insert(6) num2.insert(7) num2.insert(8) linked_list_add(num1, num2).print_list()