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)
Esempio n. 2
0
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
Esempio n. 3
0
        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],