Menu
CoddyTech

Validate Binary Search Tree

二分木はヒープ順序で配列 tree に格納されています。ルートはインデックス 0 にあり、インデックス i の子は 2*i+1(左)と 2*i+2(右)にあります。-1 は空の位置を示し、配列の末尾に余分な -1 が含まれる場合があります。

二分探索木であれば true を、そうでなければ false を返す isValidBST を記述してください。二分探索木では、各ノードの値は左部分木のすべての値より厳密に大きく、右部分木のすべての値より厳密に小さくなります。

関数

isValidBST(tree: integer-array) → boolean
treeinteger-array
二分木をレベル順に並べ、空の位置には -1 を指定します
戻り値boolean
ツリーが二分探索木であればtrue、そうでなければfalse

制約

  • 1 ≤ tree.length ≤ 32767
  • 各tree[i]は-1または0 ≤ tree[i] ≤ 105を満たす値です。
  • tree[0] が -1 になることはないため、木には少なくとも1つのノードがあります。
  • 配列の末尾には、最後のノードより後に余分な-1の要素が含まれている場合があります。
  • 空の位置の子は両方とも空で、深さは最大でも 14 です。
  • 値は重複してもかまいません。

例

入力
tree = [8, 3, 12, 1, 6, 10, 15]
出力
true
説明
順序どおり(左部分木、ノード、右部分木)に読むと、値は 1, 3, 6, 8, 10, 12, 15 です。値は厳密に増加しているため、すべてのノードがすべての祖先に対して正しい側にあります。
challenge icon

発展問題

ノードの親はインデックス (i-1)/2 にあり、小数点以下は切り捨てます。スタックや再帰の代わりに親をたどりながら、追加の領域 O(1) で木を順番に走査できますか?

コードをリセット
def isValidBST(tree):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

tree = [8, 3, 12, 1, 6, 10, 15]

期待される出力

true