Menu
CoddyTech

Validate Binary Search Tree

レベル順に配列 tree に格納された二分木が与えられます。ルートはインデックス 0 にあり、インデックス i のノードの子は 2*i+1(左)と 2*i+2(右)にあります。-1 は空の位置を示し、配列の末尾には余分な -1 の要素が含まれる場合があります。

二分探索木であれば true を、そうでなければ false を返す、isValidBST という名前の関数を書いてください。二分探索木では、すべてのノードの値は左部分木のすべての値より厳密に大きく、右部分木のすべての値より厳密に小さくなければなりません。有効な木に、同じ値が2つ含まれることはありません。

関数

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 となり、厳密に増加しています。これが探索木の性質です。

lock icon提出時に隠しテスト+16件

challenge icon

発展問題

インデックス i のノードの親は、切り捨てた (i-1)/2 の位置にあります。スタックを保持したり再帰したりする代わりに、親ノードをたどりながら、追加のスペース O(1) で木を順番に走査できますか?

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

ケース1

ケース2

ケース3

入力

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

期待値

true