예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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
예제 #4
0
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']
예제 #5
0
    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))
예제 #6
0
    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
예제 #7
0
    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])
예제 #8
0
    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 test_tree_instance():
    tree = BinaryTree()
    assert tree.root is None