def tree_intersections(self, other_tree): from code_challenges.merge_sort.merge_sort import merge_sort intersections = [] def walk(root): if not root: return # pre-order traversal, we'll see if the other tree contains value if other_tree.contains(root.value): intersections.append(root.value) # now lets recursively walk the left and right children walk(root.left) walk(root.right) walk(self.root) merge_sort(intersections) return intersections
def tree_intersection(binarytree1, binarytree2): def binary_tree_to_unique_hashtable(binarytree): bt_hashtable = Hashtable() def walk(root): if root.left_node: walk(root.left_node) if root.value and not bt_hashtable.contains(str(root.value)): bt_hashtable.add(str(root.value), 1) if root.right_node: walk(root.right_node) walk(binarytree.root) return bt_hashtable bt_hashtable = binary_tree_to_unique_hashtable(binarytree1) def find_common_values(hashtable1, binarytree2): repeats = set() def walk(root): if root.left_node: walk(root.left_node) if root.value and hashtable1.contains(str(root.value)): repeats.add(root.value) if root.right_node: walk(root.right_node) walk(binarytree2.root) return repeats repeats = find_common_values(bt_hashtable, binarytree2) return merge_sort(list(repeats))
def test_assert_sort_insertion_temp(): assert merge_sort([8, 4, 23, 42, 16, 15])
def test_merge_sort_negative_array(): arr = [8, 4, 23, 42, -16, 15] actual = merge_sort(arr) expected = [-16, 4, 8, 15, 23, 42] assert actual == expected
def test_single_list(): the_list = [5] merge_sort(the_list) actual = the_list expect = [5] assert actual == expect
def test_unsorted_list_with_duplicates(): the_list = [3, 6, 2, 4, 3] merge_sort(the_list) actual = the_list expect = [2, 3, 3, 4, 6] assert actual == expect
def test_already_sorted_list(): the_list = [1, 2, 3, 4, 5] merge_sort(the_list) actual = the_list expect = [1, 2, 3, 4, 5] assert actual == expect
def test_arr_one(): actual = merge_sort([8,4,23,42,16,15]) expected = [4,8,15,16,23,42] assert actual == expected
def test_sort_one(): test = [5, 4, 3, 2] merge_sort(test) actual = test expected = [2, 3, 4, 5] assert actual == expected
def test_sort_two(): test = [10, 20, 3, 40] merge_sort(test) actual = test expected = [3, 10, 20, 40] assert actual == expected
def test_edge(): actual = merge_sort([1]) expected = [1] assert actual == expected
def test_reverse_sorted(): actual = merge_sort([20, 18, 12, 8, 5, -2]) expect = [-2, 5, 8, 12, 18, 20] assert actual == expect
def test_unsorted_list(): actual = merge_sort([1, 5, 6, 7, 8, 2, 4, 55, 111]) expect = [1, 2, 4, 5, 6, 7, 8, 55, 111] assert actual == expect
def test_nearly_sorted(): actual = merge_sort([2, 3, 5, 7, 13, 11]) expect = [2, 3, 5, 7, 11, 13] assert actual == expect
def test_few_uniques(): actual = merge_sort([5, 12, 7, 5, 5, 7]) expect = [5, 5, 5, 7, 7, 12] assert actual == expect
def test_arr_three(): actual = merge_sort([5,12,7,5,5,7]) expected = [5,5,5,7,7,12] assert actual == expected
def test_arr_four(): actual = merge_sort([2,3,5,7,13,11]) expected = [2,3,5,7,11,13] assert actual == expected
def test_negative_numbers(): arr = [-7, -9, -8, 3] actual = merge_sort(arr) expected = [-9, -8, -7, 3] assert actual == expected
def test_arr_two(): actual = merge_sort([20,18,12,8,5,-2]) expected = [-2,5,8,12,18,20] assert actual == expected
def test_reverse_sorted(): arr = [20, 18, 12, 8, 5, -2] actual = merge_sort(arr) expected = [-2, 5, 8, 12, 18, 20] assert actual == expected
def test_unsorted_list(): the_list = [3, 6, 2, 4] merge_sort(the_list) actual = the_list expect = [2, 3, 4, 6] assert actual == expect
def test_few_uniques(): arr = [5, 12, 7, 5, 5, 7] actual = merge_sort(arr) expected = [5, 5, 5, 7, 7, 12] assert actual == expected
def test_unsorted_list_with_negatives_and_zero(): the_list = [3, -6, -2, 4, 3, 0] merge_sort(the_list) actual = the_list expect = [-6, -2, 0, 3, 3, 4] assert actual == expect
def test_nearly_sorted(): arr = [2, 3, 5, 7, 13, 11] actual = merge_sort(arr) expected = [2, 3, 5, 7, 11, 13] assert actual == expected
def test_merge_sort_simple_array(): arr = [8, 4, 23, 42, 16, 15] actual = merge_sort(arr) expected = [4, 8, 15, 16, 23, 42] assert actual == expected
def test_one_index(): arr = [7] actual = merge_sort(arr) expected = [7] assert actual == expected
def test_merge_sort_unique_array(): arr = [5, 12, 7, 5, 5, 7] actual = merge_sort(arr) expected = [5, 5, 5, 7, 7, 12] assert actual == expected
def test_none(): arr = [] actual = merge_sort(arr) expected = 'theres nothing here...' assert actual == expected
def test_merge_sort_empty_array(): arr = [] actual = merge_sort(arr) expected = None assert actual == expected
def test_happy_path(): arr = [8, 4, 23, 42, 16, 15] actual = merge_sort(arr) expected = [4, 8, 15, 16, 23, 42] assert actual == expected