与えられた配列が二分探索木(BST)かどうかを判定する方法


BSTの特性は以下の通りです:

  1. 任意のノードの値は、その左の子ノードの値よりも大きく、右の子ノードの値よりも小さい。
  2. 左右の子ノードはそれぞれ独立したBSTである。

与えられた配列がBSTであるかどうかを判定するには、以下の手順を実行します。

  1. 配列の最初の要素を根ノードとして扱います。
  2. 次の要素を順番に処理し、その値が現在のノードよりも小さい場合は左の子ノードに、大きい場合は右の子ノードに配置します。
  3. 配列の要素をすべて処理するまで、2番目の手順を繰り返します。

上記の手順に従って配列を処理し、すべての要素が正しい位置に配置されている場合、与えられた配列はBSTです。しかし、一度でも正しい位置に配置できない要素がある場合、BSTではありません。

以下に、Pythonでの実装例を示します。

def is_bst(arr):
    if len(arr) <= 1:
        return True
    root = arr[0]
    left_subtree = []
    right_subtree = []
    for i in range(1, len(arr)):
        if arr[i] < root:
            left_subtree.append(arr[i])
        else:
            right_subtree.append(arr[i])
    for val in left_subtree:
        if val >= root:
            return False
    for val in right_subtree:
        if val <= root:
            return False
    return is_bst(left_subtree) and is_bst(right_subtree)

この実装では、再帰的なアプローチを使用して与えられた配列を処理しています。左の部分木と右の部分木に対して再帰的にis_bst関数を呼び出し、それぞれがBSTであることを確認します。

このコードを使って、与えられた配列がBSTかどうかを判定できます。返り値がTrueであればBSTであり、FalseであればBSTではありません。

以上が、与えられた配列がBSTであるかどうかを判定するシンプルで簡単な方法とコード例です。