def test_add_internal_child_to_binary_node(self):
     one = BinaryNode(1)
     two = BinaryNode(2)
     three = BinaryNode(3)
     one.left = three
     # one = {left: 3, right: None}
     one.insert(two, three)
     self.assertTrue(test_binary_node(one, 1, 2, None, None))
     self.assertTrue(test_binary_node(two, 2, 3, None, 1))
     self.assertTrue(test_binary_node(three, 3, None, None, 2))
 def test_add_external_child_to_binary_node(self):
     one = BinaryNode(1)
     two = BinaryNode(2)
     one.insert(two)
     self.assertTrue(test_binary_node(one, 1, 2, None, None))
     self.assertTrue(test_binary_node(two, 2, None, None, 1))
     three = BinaryNode(3)
     one.insert(three)
     self.assertTrue(test_binary_node(one, 1, 2, 3, None))
     self.assertTrue(test_binary_node(two, 2, None, None, 1))
     self.assertTrue(test_binary_node(three, 3, None, None, 1))
     four = BinaryNode(4)
     two.insert(four)
     self.assertTrue(test_binary_node(two, 2, 4, None, 1))
     self.assertTrue(test_binary_node(four, 4, None, None, 2))
def wide_btree():
    "Returns a root node filled in the below pattern"
#               1
#             /   \
#           2       3
#         /   \     /
#       4       5   6
#                  / \
#                7    8
    
    node1 = BinaryNode(1)
    node2 = BinaryNode(2)
    node3 = BinaryNode(3)
    node4 = BinaryNode(4)
    node5 = BinaryNode(5)
    node6 = BinaryNode(6)
    node7 = BinaryNode(7)
    node8 = BinaryNode(8)
    node1.insert(node2)
    node1.insert(node3)
    node2.insert(node4)
    node2.insert(node5)
    node3.insert(node6)
    node6.insert(node7)
    node6.insert(node8)

    return node1