BSTの特性は以下の通りです:
- 任意のノードの値は、その左の子ノードの値よりも大きく、右の子ノードの値よりも小さい。
- 左右の子ノードはそれぞれ独立したBSTである。
与えられた配列がBSTであるかどうかを判定するには、以下の手順を実行します。
- 配列の最初の要素を根ノードとして扱います。
- 次の要素を順番に処理し、その値が現在のノードよりも小さい場合は左の子ノードに、大きい場合は右の子ノードに配置します。
- 配列の要素をすべて処理するまで、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であるかどうかを判定するシンプルで簡単な方法とコード例です。