class BinaryTreeTests(unittest.TestCase): def setUp(self): level1_0 = BinaryTreeNode('d') level1_1 = BinaryTreeNode('i') level2_0 = BinaryTreeNode('b') level2_1 = BinaryTreeNode('e') level2_2 = BinaryTreeNode('j') level2_3 = BinaryTreeNode('m') level3_0 = BinaryTreeNode('a') level3_1 = BinaryTreeNode('c') level3_2 = BinaryTreeNode('f') level3_3 = BinaryTreeNode('g') level3_4 = BinaryTreeNode('k') level3_5 = BinaryTreeNode('l') level3_6 = BinaryTreeNode('n') level3_7 = BinaryTreeNode('o') level1_0.set_left(level2_0) level1_0.set_right(level2_1) level1_1.set_left(level2_2) level1_1.set_right(level2_3) level2_0.set_left(level3_0) level2_0.set_right(level3_1) level2_1.set_left(level3_2) level2_1.set_right(level3_3) level2_2.set_left(level3_4) level2_2.set_right(level3_5) level2_3.set_left(level3_6) level2_3.set_right(level3_7) balanced_tree = BinaryTreeNode('h') balanced_tree.set_left(level1_0) balanced_tree.set_right(level1_1) self.balanced_tree = BinaryTree(balanced_tree) return def tearDown(self): self.balanced_tree = None def test_level_order_traversal(self): out = self.balanced_tree.traversal_level_order() self.assertEquals(out, "hdibejmacfgklno") def test_traversal_inorder(self): out = self.balanced_tree.traversal_inorder() self.assertEquals(out, "abcdfeghkjlinmo") def test_leaf_count(self): self.assertEqual(self.balanced_tree.leaf_count(), 8)
def test_return_maximum_value(): binary_tree=BinaryTree() node1 = Node(1) node2 = Node(2) node3 = Node(8) node4 = Node(84) node5 = Node(66) node6 = Node(14) binary_tree.root=node1 node1.left = node2 node1.right = node3 node2.left = node4 node2.right = node5 node3.left = node6 assert binary_tree.max_value()==84
def test_return_a_collection_from_a_postorder_traversal(): binary_tree=BinaryTree() node1 = Node('A') node2 = Node('B') node3 = Node('C') node4 = Node('D') node5 = Node('E') node6 = Node('F') binary_tree.root=node1 node1.left = node2 node1.right = node3 node2.left = node4 node2.right = node5 node3.left = node6 post_order = binary_tree.post_order() assert post_order == ['D', 'E', 'B', 'F', 'C', 'A']
def test_basic_binary_tree_creation(self): int_list = range(1, 8) shuffle(int_list) binary_tree = BinaryTree.create_bst(int_list) actual_path = binary_tree.in_order_traversal_path() expected_path = sorted(int_list) self.assertEquals(actual_path, expected_path) expected_tree = TestBinaryTree.create_basic_binary_search_tree_ints() print expected_tree.in_order_traversal_path() self.assertTrue(binary_tree.is_equal(expected_tree))
def setUp(self): level1_0 = BinaryTreeNode('d') level1_1 = BinaryTreeNode('i') level2_0 = BinaryTreeNode('b') level2_1 = BinaryTreeNode('e') level2_2 = BinaryTreeNode('j') level2_3 = BinaryTreeNode('m') level3_0 = BinaryTreeNode('a') level3_1 = BinaryTreeNode('c') level3_2 = BinaryTreeNode('f') level3_3 = BinaryTreeNode('g') level3_4 = BinaryTreeNode('k') level3_5 = BinaryTreeNode('l') level3_6 = BinaryTreeNode('n') level3_7 = BinaryTreeNode('o') level1_0.set_left(level2_0) level1_0.set_right(level2_1) level1_1.set_left(level2_2) level1_1.set_right(level2_3) level2_0.set_left(level3_0) level2_0.set_right(level3_1) level2_1.set_left(level3_2) level2_1.set_right(level3_3) level2_2.set_left(level3_4) level2_2.set_right(level3_5) level2_3.set_left(level3_6) level2_3.set_right(level3_7) balanced_tree = BinaryTreeNode('h') balanced_tree.set_left(level1_0) balanced_tree.set_right(level1_1) self.balanced_tree = BinaryTree(balanced_tree) return
def generate_binary_tree(adj_map, starting_node_name): """ Ex: A: [B, C] B: [D, E] D: [None, F] Creates a binary tree of the following form: A /\ B C /\ \ D E F :param adj_map: the adjacency map used as a basis to construct the binary tree, in the following form: ${parent_node}: [${left_child}, ${right_child}] :type adj_map: dict :param starting_node_name: the node that the binary tree starts with :type starting_node_name: str or int :return: """ node_name_set = set(starting_node_name) if isinstance(starting_node_name, str) else set([starting_node_name]) for (left_child_name, right_child_name) in adj_map.itervalues(): node_children_set = {left_child_name, right_child_name} node_name_set.update(node_children_set) node_map = {_node_name: BinaryTreeNode(_node_name) for _node_name in node_name_set if _node_name is not None} # Iterate through each parent: left_child, right_child in the adj map and adjust ptrs accordingly. for parent_node_name, (left_child_name, right_child_name) in adj_map.iteritems(): parent_node = node_map[parent_node_name] left_node = None if left_child_name is None else node_map[left_child_name] right_node = None if right_child_name is None else node_map[right_child_name] parent_node.set_left(left_node) parent_node.set_right(right_node) return BinaryTree(node_map[starting_node_name])
def test_tree_instance(): tree = BinaryTree() assert tree.root is None