Menu
CoddyTech

Balanced Binary Tree

やさしい木の走査再帰python iconjava iconcpp iconc iconjs icon+10

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

木が高さ平衡である場合、つまりすべてのノードで左部分木と右部分木の高さの差が最大でも 1 である場合は true を返し、それ以外の場合は false を返してください。部分木の高さは、最も長い下向きの経路にあるノードの数です。空の部分木の高さは 0 です。

関数

isBalanced(root: integer-array) → boolean
rootinteger-array
二分木をレベル順に表し、空の位置には -1 を指定
戻り値boolean
true:すべてのノードで、2つの部分木の高さの差が1以下の場合。そうでない場合はfalse。

制約

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

例

入力
root = [5, 2, 9, -1, -1, 7, 11]
出力
true
説明
ルートの左部分木は単一ノード 2 で、高さは 1 です。右部分木の 9、7、11 の高さは 2 です。高さの差は 1 で、それ以外のすべてのノードは、左右の部分木の高さが等しくなっています。
challenge icon

発展問題

明示的なスタックを使って、再帰なしでツリーを確認できますか?

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

テスト #1

テスト #2

テスト #3

引数

root = [5, 2, 9, -1, -1, 7, 11]

期待される出力

true