def setUp(self): # The keys are unique house numbers in a street. # The values are the names of inhabitants. self.houses = [number for number in range(31, 36)] self.people = ['Jane', 'John', 'Ann', 'Bob', 'John'] # Create trees for the tests to use. # A brand new tree. self.new = BinarySearchTree() # An empty tree. Tests removal of single node. self.empty = BinarySearchTree() self.empty.add(self.houses[0], self.people[0]) self.empty.remove(self.houses[0]) # Tree with a single node, with highest key. self.root = BinarySearchTree() self.root.add(self.houses[-1], self.people[-1]) # Unbalanced tree: add the keys in ascending order. self.linear = BinarySearchTree() for house, person in zip(self.houses, self.people): self.linear.add(house, person) # Balanced tree: first add the median key. self.balanced = BinarySearchTree() self.balanced.add(33, 'Ann') self.balanced.add(34, 'Bob') self.balanced.add(35, 'John') self.balanced.add(32, 'John') self.balanced.add(31, 'Jane')
def test_can_create_complex_tree(self): expected = TreeNode( "4", TreeNode("2", TreeNode("1", None, None), TreeNode("3", None, None)), TreeNode("6", TreeNode("5", None, None), TreeNode("7", None, None)), ) self.assertTreeEqual( BinarySearchTree(["4", "2", "6", "1", "3", "5", "7"]).data(), expected)
def test_can_sort_complex_tree(self): expected = ["1", "2", "3", "5", "6", "7"] assert BinarySearchTree(["2", "1", "3", "6", "7", "5"]).sorted_data() == expected
def test_data_is_retained(self): expected = TreeNode("4", None, None) bst = BinarySearchTree(["4"]) self.assertTreeEqual(bst.data(), expected)
def test_can_sort_if_second_number_is_greater_than_first(self): expected = ["2", "3"] assert BinarySearchTree(["2", "3"]).sorted_data() == expected
def test_can_sort_if_second_number_is_same_as_first(self): expected = ["2", "2"] assert BinarySearchTree(["2", "2"]).sorted_data() == expected
def test_can_sort_single_number(self): expected = ["2"] assert BinarySearchTree(["2"]).sorted_data() == expected
def test_greater_number_at_right_node(self): expected = TreeNode("4", None, TreeNode("5", None, None)) self.assertTreeEqual(BinarySearchTree(["4", "5"]).data(), expected)
def test_same_number_at_left_node(self): expected = TreeNode("4", TreeNode("4", None, None), None) self.assertTreeEqual(BinarySearchTree(["4", "4"]).data(), expected)
def test_smaller_number_at_left_node(self): expected = TreeNode("4", TreeNode("3", None, None), None) bst = BinarySearchTree(["4", "3"]) self.assertTreeEqual(bst.data(), expected)