def test_vertical_string(self): root = Node(10) root.left_child = Node(12) root.left_child.left_child = Node(25) root.left_child.right_child = Node(30) root.right_child = Node(15) root.right_child.left_child = Node(36) self.assertEqual('251210303615', root.vertical_string())
def test_find_leftmost_rightmost(self): root = Node(10) root.left_child = Node(12) root.left_child.left_child = Node(25) root.left_child.right_child = Node(30) root.right_child = Node(15) root.right_child.left_child = Node(36) left, right = root.find_leftmost_rightmost(0) self.assertEqual(left, -2) self.assertEqual(right, 1)
def test_str(self): root = Node('a') root.insert_left('b') root.left_child.insert_right('d') root.insert_right('f') root.insert_right('c') root.right_child.insert_left('e') self.assertEqual('bdaecf', root.str_in_order()) self.assertEqual('abdcef', root.str_pre_order()) self.assertEqual('dbefca', root.str_post_order()) self.assertEqual('abcdef', root.str_bfs())
def insert(self, v): n = Node(v) if self.root == None: self.root = n else: x = self.root while not x == None: y = x x = x.left if v < x.val else x.right n.p = y if v < y.val: y.left = n if v >= y.val: y.right = n
def test_size_many(self): self.bt.root = Node(6) n3 = self.bt.root.left_child = Node(3) n3.left_child = Node(2) n5 = n3.right_child = Node(5) n5.left_child = Node(4) n9 = self.bt.root.right_child = Node(9) n9.left_child = Node(8) n9.right_child = Node(12) self.assertEqual(8, self.bt.size())
def test_height_more(self): self.bt.root = Node(6) n3 = self.bt.root.left_child = Node(3) n3.left_child = Node(2) n5 = n3.right_child = Node(5) n5.left_child = Node(4) n9 = self.bt.root.right_child = Node(9) n9.left_child = Node(8) n9.right_child = Node(12) self.assertEqual(3, self.bt.height())
def test_level_order_many(self): self.bt.root = Node(6) n3 = self.bt.root.left_child = Node(3) n3.left_child = Node(2) n5 = n3.right_child = Node(5) n5.left_child = Node(4) n9 = self.bt.root.right_child = Node(9) n9.left_child = Node(8) n9.right_child = Node(12) self.assertEqual([6, 3, 9, 2, 5, 8, 12, 4], self.bt.level_order())
def test_size_many_unbalanced(self): self.bt.root = Node(6) n5 = self.bt.root.left_child = Node(5) n4 = n5.left_child = Node(4) n3 = n4.left_child = Node(3) n3.left_child = Node(2) n7 = self.bt.root.right_child = Node(7) n8 = n7.right_child = Node(8) n8.right_child = Node(9) self.assertEqual(8, self.bt.size())
def test_post_order(self): self.bt.root = Node(6) n3 = self.bt.root.left_child = Node(3) n3.left_child = Node(2) n5 = n3.right_child = Node(5) n5.left_child = Node(4) n9 = self.bt.root.right_child = Node(9) n9.left_child = Node(8) n9.right_child = Node(12) self.assertEqual([2, 4, 5, 3, 8, 12, 9, 6], self.bt.post_order())
def test_in_order(self): self.bt.root = Node(6) n3 = self.bt.root.left_child = Node(3) n3.left_child = Node(2) n5 = n3.right_child = Node(5) n5.left_child = Node(4) n9 = self.bt.root.right_child = Node(9) n9.left_child = Node(8) n9.right_child = Node(12) self.assertEqual([2, 3, 4, 5, 6, 8, 9, 12], self.bt.in_order())
def test_contains_internal(self): self.bt.root = Node(6) n3 = self.bt.root.left_child = Node(3) n3.left_child = Node(2) n5 = n3.right_child = Node(5) n5.left_child = Node(4) n9 = self.bt.root.right_child = Node(9) n9.left_child = Node(8) n9.right_child = Node(12) self.assertEqual(True, self.bt.contains(3)) self.assertEqual(True, self.bt.contains(5)) self.assertEqual(True, self.bt.contains(9))
def test_build_tree_llist(self): llist = LinkedList() llist.append(10) llist.append(12) llist.append(15) llist.append(25) llist.append(30) llist.append(36) root = Node.build_tree_llist(llist.head) self.assertEqual('101225301536', root.str_pre_order()) self.assertEqual('251230103615', root.str_in_order())
def test_contains_not(self): self.bt.root = Node(6) n3 = self.bt.root.left_child = Node(3) n3.left_child = Node(2) n5 = n3.right_child = Node(5) n5.left_child = Node(4) n9 = self.bt.root.right_child = Node(9) n9.left_child = Node(8) n9.right_child = Node(12) self.assertEqual(False, self.bt.contains(10)) self.assertEqual(False, self.bt.contains(7)) self.assertEqual(False, self.bt.contains(11))
def test_build_from_array(self): array = [1, 2, 3, 4, 5, 6, 7] root = Node.build_from_array(array) self.assertEqual(root.str_in_order(), '1234567') self.assertEqual(root.str_pre_order(), '4213657') self.assertEqual(root.str_post_order(), '1325764')
def test_sum_tree(self): root = Node(50) root.insert(13) root.insert(21) root.insert(27) root.insert(76) root.insert(2) root.insert(44) root.insert(51) root.insert(6) root.insert(9) root.insert(11) rootb, value = root.get_sum_tree() self.assertEqual(rootb.str_in_order(), '262011012071440260051')
def test_distance(self): root = Node(50) root.insert(13) root.insert(21) root.insert(27) root.insert(76) root.insert(2) root.insert(44) root.insert(51) root.insert(6) root.insert(9) root.insert(11) distance = root.distance(11, 44) self.assertEqual(distance, 7)
def test_fast_lca(self): root = Node(50) root.insert(13) root.insert(21) root.insert(27) root.insert(76) root.insert(2) root.insert(44) root.insert(51) root.insert(6) root.insert(9) root.insert(11) node = root.fast_lca(11, 44) self.assertEqual(node.data, 13)
def test_height_one(self): self.bt.root = Node(4) self.assertEqual(0, self.bt.height())
def test_to_dlinked_list(self): root = Node(10) root.left_child = Node(12) root.left_child.left_child = Node(25) root.left_child.right_child = Node(30) root.right_child = Node(15) root.right_child.left_child = Node(36) self.assertEqual('251230103615', root.str_in_order()) dll = DoublyLinkedList() dll.head, temp = root.to_dlinked_list() self.assertEqual('25 12 30 10 36 15 ', str(dll))
def test_boundaries(self): root = Node(10) root.left_child = Node(12) root.left_child.left_child = Node(25) root.left_child.right_child = Node(30) root.left_child.left_child.right_child = Node(19) root.left_child.right_child.right_child = Node(23) root.left_child.left_child.right_child.right_child = Node(3) root.left_child.left_child.right_child.right_child.right_child = Node(6) root.right_child = Node(15) root.right_child.left_child = Node(36) self.assertEqual('1012251936233615', root.boundaries())
def test_is_not_empty(self): self.bt.root = Node(5) self.assertEqual(False, self.bt.is_empty())
def test_size_one(self): self.bt.root = Node(5) self.assertEqual(1, self.bt.size())
def test_balance(self): root = Node(4) root.left_child = Node(3) root.left_child.left_child = Node(2) root.left_child.left_child.left_child = Node(1) root.right_child = Node(5) root.right_child.right_child = Node(6) root.right_child.right_child.right_child = Node(7) broot = root.balance() self.assertEqual(broot.str_in_order(), '1234567') self.assertEqual(broot.str_pre_order(), '4213657') self.assertEqual(broot.str_post_order(), '1325764')
def test_build_tree_pre_post(self): pre_order = ['A', 'B', 'D', 'E', 'C', 'F'] post_order = ['D', 'E', 'B', 'F', 'C', 'A'] root = Node.build_tree_pre_post(pre_order, post_order) self.assertEqual('ABDECF', root.str_pre_order()) self.assertEqual('DBEAFC', root.str_in_order())
def test_binary_search(self): root = Node(50) root.insert(13) root.insert(21) root.insert(27) root.insert(76) root.insert(2) root.insert(44) root.insert(51) root.insert(6) root.insert(9) root.insert(11) node = root.binary_search(10) self.assertIsNone(node)
def test_build_special_tree(self): pre_order = ['A', 'B', 'D', 'E', 'C', 'F', 'G'] pre_nl = ['N', 'N', 'L', 'L', 'N', 'L', 'L'] root, index = Node.build_special_tree(pre_order, pre_nl) self.assertEqual('ABDECFG', root.str_pre_order()) self.assertEqual('DBEAFCG', root.str_in_order())
def test_compare_leaves(self): rootA = Node(1) rootA.left_child = Node(2) rootA.left_child.left_child = Node(4) rootA.right_child = Node(3) rootA.right_child.left_child = Node(6) rootA.right_child.right_child = Node(7) rootB = Node(0) rootB.left_child = Node(5) rootB.left_child.right_child = Node(4) rootB.right_child = Node(8) rootB.right_child.left_child = Node(6) rootB.right_child.right_child = Node(7) self.assertTrue(rootA.compare_leaves(rootB)) rootC = Node(0) rootC.left_child = Node(1) rootC.left_child.left_child = Node(8) rootC.left_child.right_child = Node(9) rootC.right_child = Node(2) rootD = Node(1) rootD.left_child = Node(4) rootD.left_child.right_child = Node(8) rootD.right_child = Node(3) rootD.right_child.left_child = Node(2) rootD.right_child.right_child = Node(9) self.assertFalse(rootC.compare_leaves(rootD))
def test_insert(self): root = Node(50) root.insert(13) root.insert(21) root.insert(27) root.insert(76) root.insert(2) root.insert(44) root.insert(51) root.insert(6) root.insert(9) root.insert(11) self.assertEqual('2691113212744505176', root.str_in_order())
def test_build_tree_in_level(self): level_order = ['A', 'B', 'C', 'D', 'E', 'F'] in_order = ['D', 'B', 'E', 'A', 'F', 'C'] root = Node.build_tree_in_level(in_order, level_order) self.assertEqual('ABDECF', root.str_pre_order()) self.assertEqual('DBEAFC', root.str_in_order())
def test_contains_root(self): self.bt.root = Node(6) self.bt.root.left_child = Node(3) self.bt.root.right_child = Node(9) self.assertEqual(True, self.bt.contains(6))