def minimal_tree(sorted_list): if not sorted_list: return mid = len(sorted_list) // 2 left = minimal_tree(sorted_list[:mid]) right = minimal_tree(sorted_list[mid + 1:]) return BinarySearchTree.Node(sorted_list[mid], left, right)
def test_successor(): node_1 = BinarySearchTree.Node(1) node_3 = BinarySearchTree.Node(3) node_2 = BinarySearchTree.Node(2, node_1, node_3) node_5 = BinarySearchTree.Node(5) node_7 = BinarySearchTree.Node(7) node_6 = BinarySearchTree.Node(6, node_5, node_7) node_4 = BinarySearchTree.Node(4, node_2, node_6) assert successor(node_1) == node_2 assert successor(node_2) == node_3 assert successor(node_3) == node_4 assert successor(node_4) == node_5 assert successor(node_5) == node_6 assert successor(node_6) == node_7 assert successor(node_7) is None
if sub_bst.left: remaining_sub_bsts.append(sub_bst.left) if sub_bst.right: remaining_sub_bsts.append(sub_bst.right) possible_sequences += all_possible_bst_sequences_helper(next_prefix, remaining_sub_bsts) return possible_sequences def all_possible_bst_sequences(bst): return all_possible_bst_sequences_helper([], [bst]) @pytest.mark.parametrize('bst, expected_possible_sequences', [ (BinarySearchTree.Node(2, BinarySearchTree.Node(1), BinarySearchTree.Node(3)), [ [2, 1, 3], [2, 3, 1] ]), (BinarySearchTree.Node(7, BinarySearchTree.Node(4, BinarySearchTree.Node(5)), BinarySearchTree.Node(9)), [ [7, 4, 9, 5], [7, 4, 5, 9], [7, 9, 4, 5] ]), ((BinarySearchTree.Node(7, BinarySearchTree.Node(4, BinarySearchTree.Node(5), BinarySearchTree.Node(6)), BinarySearchTree.Node(9))), [ [7, 4, 9, 5, 6], [7, 4, 9, 6, 5], [7, 4, 5, 9, 6], [7, 4, 5, 6, 9], [7, 4, 6, 9, 5],