def test_init_with_list_of_tuples(self):
     tree = BinarySearchTree([(2, 'B'), (1, 'A'), (3, 'C')])
     assert tree.root.data == (2, 'B')
     assert tree.root.left.data == (1, 'A')
     assert tree.root.right.data == (3, 'C')
     assert tree.size == 3
     assert tree.is_empty() is False
Esempio n. 2
0
def main():

    tree = BinarySearchTree()

    tree.insert_list([20, 8, 22, 4, 12, 10, 14])

    sucessor = tree.sucessor(tree.find(20))
 def test_search_with_7_items(self):
     # Create a complete binary search tree of 7 items in level-order
     items = [4, 2, 6, 1, 3, 5, 7]
     tree = BinarySearchTree(items)
     for item in items:
         assert tree.search(item) == item
     assert tree.search(8) is None
 def test_search_with_7_strings(self):
     # Create a complete binary search tree of 7 items in level-order
     items = ['D', 'B', 'F', 'A', 'C', 'E', 'G']
     tree = BinarySearchTree(items)
     for item in items:
         assert tree.search(item) == item
     assert tree.search('H') is None
 def test_init_with_list_of_strings(self):
     tree = BinarySearchTree(['B', 'A', 'C'])
     assert tree.root.data == 'B'
     assert tree.root.left.data == 'A'
     assert tree.root.right.data == 'C'
     assert tree.size == 3
     assert tree.is_empty() is False
 def test_init_with_list(self):
     tree = BinarySearchTree([2, 1, 3])
     assert tree.root.data == 2
     assert tree.root.left.data == 1
     assert tree.root.right.data == 3
     assert tree.size == 3
     assert tree.is_empty() is False
    def test_search_third_use_case(self):
        bt = BinarySearchTree()
        bt.insert_multiple_values([10, 20, 22, 3, 7, 4, 32, 900])
        node, depth = bt.search(4)

        self.assertEqual(node.value, 4)
        self.assertEqual(depth, 3)
    def test_search_root_value(self):
        bt = BinarySearchTree()
        bt.insert_multiple_values([10, 20, 22, 3, 7, 4, 32, 900])
        node, depth = bt.search(10)

        self.assertEqual(node.value, 10)
        self.assertEqual(depth, 0)
class BinaryTreeStringList():
    """Binary Tree String List"""


    def __init__(self):
        
        self.__tree = BinarySearchTree()

    def __iter__(self):
        return iter(self.__tree)

    def __getitem__(self, key):
        return self.__tree[key]

    def __setitem__(self, key, value):
        self.__tree[key] = value

    def __str__(self):
        return str(self.__tree)

    def __len__(self):
        return len(self.__tree)

    def add(self, value):
        self.__tree.put(value)
        
    def find(self, value):
        return value in self.__tree
 def test_search_with_3_items(self):
     # Create a complete binary search tree of 3 items in level-order
     items = [2, 1, 3]
     tree = BinarySearchTree(items)
     assert tree.search(1) == 1
     assert tree.search(2) == 2
     assert tree.search(3) == 3
     assert tree.search(4) is None
 def test_search_with_3_strings(self):
     # Create a complete binary search tree of 3 items in level-order
     items = ['B', 'A', 'C']
     tree = BinarySearchTree(items)
     assert tree.search('A') == 'A'
     assert tree.search('B') == 'B'
     assert tree.search('C') == 'C'
     assert tree.search('D') is None
    def test_structure(self):
        bt = BinarySearchTree()
        bt.insert_multiple_values([10, 20, 22, 3, 7, 4, 32, 900])

        self.assertEqual(bt.root.value, 10)
        self.assertEqual(bt.root.left.value, 3)
        self.assertEqual(bt.root.left.right.value, 7)
        self.assertEqual(bt.root.left.right.left.value, 4)
Esempio n. 13
0
 def test_delete_with_linked_list_trees(self):
     # Create a complete binary search tree of 7 items in level-order
     items = [1, 2, 3, 4, 5, 6]
     tree = BinarySearchTree(items)
     tree.delete(2)
     assert tree.root.data == 1
     assert tree.root.left is None
     assert tree.root.right.data == 3
     assert tree.root.right.right.data == 4
     assert tree.root.right.left is None
Esempio n. 14
0
 def test_delete_with_unbalanced_trees(self):
     # Create a complete binary search tree of 7 items in level-order
     items = [3, 6, 1, 2, 5, 7]
     tree = BinarySearchTree(items)
     tree.delete(2)
     assert tree.root.data == 3
     assert tree.root.left.data == 1
     assert tree.root.right.data == 6
     assert tree.root.left.left is None
     assert tree.root.left.right is None
Esempio n. 15
0
    def setUp(self):

        self.empty_bst = BinarySearchTree()
        self.single_node_bst = BinarySearchTree()
        self.single_node_bst.insert(-1)

        self.small_bst = BinarySearchTree()
        self.small_bst.insert(43)
        self.small_bst.insert(43)
        self.small_bst.insert(-2)
        self.small_bst.insert(102)

        self.toy_bst = get_toy_binary_search_tree()
 def test_insert_with_7_items(self):
     # Create a complete binary search tree of 7 items in level-order
     items = [4, 2, 6, 1, 3, 5, 7]
     tree = BinarySearchTree()
     for item in items:
         tree.insert(item)
     assert tree.root.data == 4
     assert tree.root.left.data == 2
     assert tree.root.right.data == 6
     assert tree.root.left.left.data == 1
     assert tree.root.left.right.data == 3
     assert tree.root.right.left.data == 5
     assert tree.root.right.right.data == 7
Esempio n. 17
0
    def test_insert(self):
        bstn = BinarySearchTreeNode(10)
        bst = BinarySearchTree(bstn)

        bst.insert(12)
        bst.insert(8)

        self.assertFalse(bst.is_in_tree(9))
        self.assertTrue(bst.is_in_tree(12))
        self.assertTrue(bst.is_in_tree(8))
 def DISABLED_test_delete_with_3_items(self):
     # Create a complete binary search tree of 3 items in level-order
     items = [2, 1, 3]
     tree = BinarySearchTree(items)
     assert tree.root.data == 2
     assert tree.root.left.data == 1
     assert tree.root.right.data == 3
 def test_size(self):
     tree = BinarySearchTree()
     assert tree.size == 0
     tree.insert('B')
     assert tree.size == 1
     tree.insert('A')
     assert tree.size == 2
     tree.insert('C')
     assert tree.size == 3
    def test_deletion_first_use_case(self):
        bt = BinarySearchTree()
        bt.insert_multiple_values([10, 20, 22, 3, 7, 4, 32, 900])
        node, depth = bt.search(4)

        self.assertEqual(node.value, 4)
        self.assertEqual(depth, 3)

        bt.delete(4)

        node, depth = bt.search(4)

        self.assertIsNone(node)
        self.assertEqual(bt.in_order(), [3, 7, 10, 20, 22, 32, 900])
    def test_deletion_leaf(self):
        bt = BinarySearchTree()
        bt.insert_multiple_values([10, 20, 22, 3, 7, 4, 32, 900])
        node, depth = bt.search(900)

        self.assertEqual(node.value, 900)
        self.assertEqual(depth, 4)

        bt.delete(900)

        node, _ = bt.search(900)

        self.assertIsNone(node)
        self.assertEqual(bt.in_order(), [3, 4, 7, 10, 20, 22, 32])
    def test_inserts_value_to_the_right_if_greater_second_level(self):
        bt = BinarySearchTree()
        bt.insert(10)
        bt.insert(11)
        bt.insert(12)

        self.assertEqual(bt.root.right.right.value, 12)
    def test_inserts_value_to_the_right_and_then_left(self):
        bt = BinarySearchTree()
        bt.insert(10)
        bt.insert(20)
        bt.insert(15)

        self.assertEqual(bt.root.right.left.value, 15)
    def test_inserts_value_to_the_left_if_smaller_second_level(self):
        bt = BinarySearchTree()
        bt.insert(10)
        bt.insert(2)
        bt.insert(1)

        self.assertEqual(bt.root.left.left.value, 1)
 def test_insert_with_3_items(self):
     # Create a complete binary search tree of 3 items in level-order
     tree = BinarySearchTree()
     tree.insert(2)
     assert tree.root.data == 2
     assert tree.root.left is None
     assert tree.root.right is None
     tree.insert(1)
     assert tree.root.data == 2
     assert tree.root.left.data == 1
     assert tree.root.right is None
     tree.insert(3)
     assert tree.root.data == 2
     assert tree.root.left.data == 1
     assert tree.root.right.data == 3
Esempio n. 26
0
    def test_size(self):
        bstn = BinarySearchTreeNode(10)
        bst = BinarySearchTree(bstn)

        bst.insert(12)
        bst.insert(8)
        bst.insert(7)

        self.assertEqual(size(bst.root), 4)
Esempio n. 27
0
 def test_delete_with_3_items(self):
     # Create a complete binary search tree of 3 items in level-order
     items = [2, 1, 3]
     tree = BinarySearchTree(items)
     assert tree.root.data == 2
     assert tree.root.left.data == 1
     assert tree.root.right.data == 3
     tree.delete(2)
     assert tree.root.data == 1
     assert tree.root.left is None
     assert tree.root.right.data is 3
     tree.delete(1)
     assert tree.root.data == 3
     assert tree.root.left is None
     assert tree.root.right is None
     tree.delete(3)
     assert tree.root is None
Esempio n. 28
0
 def test_delete_with_7_items(self):
     # Create a complete binary search tree of 7 items in level-order
     items = [4, 2, 6, 1, 3, 5, 7]
     tree = BinarySearchTree(items)
     tree.delete(4)
     assert tree.root.data == 3
     assert tree.root.left.data == 2
     assert tree.root.right.data == 6
     assert tree.root.left.left.data == 1
     assert tree.root.left.right is None
     tree.delete(6)
     assert tree.root.data == 3
     assert tree.root.left.data == 2
     assert tree.root.right.data == 5
     assert tree.root.right.left is None
     assert tree.root.right.right.data == 7
     tree.delete(5)
     assert tree.root.data == 3
     assert tree.root.left.data == 2
     assert tree.root.right.data == 7
     assert tree.root.right.left == None
     assert tree.root.right.right == None
Esempio n. 29
0
    def test_is_bst(self):
        bstn = BinarySearchTreeNode(10)
        bst = BinarySearchTree(bstn)

        bst.insert(12)
        bst.insert(8)
        bst.insert(7)

        self.assertEqual(is_bst(bst.root, None, None), True)

        bstn = BinarySearchTreeNode(10)
        bstn.left = BinarySearchTreeNode(10)
        bstn.left.left = BinarySearchTreeNode(11)
        bstn.right = BinarySearchTreeNode(12)

        self.assertEqual(is_bst(bstn, None, None), False)

        bstn = BinarySearchTreeNode(20)
        bstn.left = BinarySearchTreeNode(10)
        bstn.left.right = BinarySearchTreeNode(25)
        bstn.right = BinarySearchTreeNode(30)

        self.assertEqual(is_bst(bstn, None, None), False)
Esempio n. 30
0
    def test_delete_node(self):
        values = [7, 3, 23, 1, 5, 9, 52, 2, 4, 36]
        tr = BinarySearchTree()
        for v in values:
            tr.insert(v)
        tr.populate_parent()

        expected_in_order_tree_after_7_delete = \
                [1, 2, 3, 4, 5, 9, 23, 36, 52]
        tr.delete_data(7)
        self.assertEquals(tr.getInOrderPath(), expected_in_order_tree_after_7_delete)
        self.assertRaises(Exception, tr.delete_data, 6)


        expected_in_order = \
                [1, 3, 4, 5, 9, 23, 36, 52]
        tr.delete_data(2)
        self.assertEquals(tr.getInOrderPath(), expected_in_order)

        expected_in_order = \
                [1, 4, 5, 9, 23, 36, 52]
        tr.delete_data(3)
        self.assertEquals(tr.getInOrderPath(), expected_in_order)

        expected_in_order = \
                [1, 4, 5, 9, 23, 36]
        tr.delete_data(52)
        self.assertEquals(tr.getInOrderPath(), expected_in_order)

        expected_in_order = \
                [1, 5, 9, 23, 36]
        tr.delete_data(4)
        self.assertEquals(tr.getInOrderPath(), expected_in_order)
Esempio n. 31
0
class TestBinarySearchTree(unittest.TestCase):
    def setUp(self):

        self.empty_bst = BinarySearchTree()
        self.single_node_bst = BinarySearchTree()
        self.single_node_bst.insert(-1)

        self.small_bst = BinarySearchTree()
        self.small_bst.insert(43)
        self.small_bst.insert(43)
        self.small_bst.insert(-2)
        self.small_bst.insert(102)

        self.toy_bst = get_toy_binary_search_tree()

    def test_maxValue(self):
        self.assertRaises(TypeError, self.empty_bst.maxValue)
        self.assertEqual(-1, self.single_node_bst.maxValue())
        self.assertEqual(102, self.small_bst.maxValue())
        self.assertEqual(102, self.toy_bst.maxValue())

    def test_minValue(self):
        self.assertRaises(TypeError, self.empty_bst.minValue)
        self.assertEqual(-1, self.single_node_bst.minValue())
        self.assertEqual(-2, self.small_bst.minValue())
        self.assertEqual(-1, self.toy_bst.minValue())

    def test_delete_node(self):
        values = [7, 3, 23, 1, 5, 9, 52, 2, 4, 36]
        tr = BinarySearchTree()
        for v in values:
            tr.insert(v)
        tr.populate_parent()

        expected_in_order_tree_after_7_delete = \
                [1, 2, 3, 4, 5, 9, 23, 36, 52]
        tr.delete_data(7)
        self.assertEquals(tr.getInOrderPath(), expected_in_order_tree_after_7_delete)
        self.assertRaises(Exception, tr.delete_data, 6)


        expected_in_order = \
                [1, 3, 4, 5, 9, 23, 36, 52]
        tr.delete_data(2)
        self.assertEquals(tr.getInOrderPath(), expected_in_order)

        expected_in_order = \
                [1, 4, 5, 9, 23, 36, 52]
        tr.delete_data(3)
        self.assertEquals(tr.getInOrderPath(), expected_in_order)

        expected_in_order = \
                [1, 4, 5, 9, 23, 36]
        tr.delete_data(52)
        self.assertEquals(tr.getInOrderPath(), expected_in_order)

        expected_in_order = \
                [1, 5, 9, 23, 36]
        tr.delete_data(4)
        self.assertEquals(tr.getInOrderPath(), expected_in_order)
 def test_init(self):
     tree = BinarySearchTree()
     assert tree.root is None
     assert tree.size == 0
     assert tree.is_empty() is True
 def test_items_level_order_with_3_strings(self):
     # Create a complete binary search tree of 3 strings in level-order
     items = ['B', 'A', 'C']
     tree = BinarySearchTree(items)
     # Ensure the level-order traversal of tree items is ordered correctly
     assert tree.items_level_order() == ['B', 'A', 'C']
 def test_items_level_order_with_7_numbers(self):
     # Create a complete binary search tree of 7 items in level-order
     items = [4, 2, 6, 1, 3, 5, 7]
     tree = BinarySearchTree(items)
     # Ensure the level-order traversal of tree items is ordered correctly
     assert tree.items_level_order() == [4, 2, 6, 1, 3, 5, 7]