def test_int(self):
     min_bst_queue = MinBSTQueue(BinaryNode.parse_tree("[[1[[2]3[4]]]5[6]]", int))
     self.assertEqual(min_bst_queue.get().value, 1)
     self.assertEqual(min_bst_queue.get().value, 2)
     self.assertEqual(min_bst_queue.get().value, 3)
     self.assertEqual(min_bst_queue.get().value, 4)
     self.assertEqual(min_bst_queue.get().value, 5)
     self.assertEqual(min_bst_queue.get().value, 6)
def solution(root, k):
    min_bst_queue = MinBSTQueue(root)
    max_bst_queue = MaxBSTQueue(root)
    i = min_bst_queue.get()
    j = max_bst_queue.get()
    while i is not j:
        i_j_sum = i.value + j.value
        if i_j_sum == k:
            return i, j
        elif i_j_sum > k:
            j = max_bst_queue.get()
        elif i_j_sum < k:
            i = min_bst_queue.get()
    return None
 def test_one_node(self):
     min_bst_queue = MinBSTQueue(BinaryNode.parse_tree("[1]", int))
     self.assertEqual(min_bst_queue.get().value, 1)
 def test_no_right(self):
     min_bst_queue = MinBSTQueue(BinaryNode.parse_tree("[[1]2]", int))
     self.assertEqual(min_bst_queue.get().value, 1)
     self.assertEqual(min_bst_queue.get().value, 2)
 def test_no_left(self):
     binary_tree = BinaryNode.parse_tree("[1[2]]", int)
     min_bst_queue = MinBSTQueue(binary_tree)
     self.assertEqual(min_bst_queue.get().value, 1)
     self.assertEqual(min_bst_queue.get().value, 2)