Menu
CoddyTech

Binary Tree Zigzag Level Order Traversal

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

ノードの値を、レベルごとにジグザグ順で返してください。根のレベルは左から右へ、次のレベルは右から左へというように、最も深いレベルまで交互にたどります。これはスパイラルレベル順走査とも呼ばれます。

関数

zigzagLevelOrder(root: integer-array) → integer-2d-array
rootinteger-array
ヒープ順序で表した木。空の位置には -1
戻り値integer-2d-array
レベルごとに値のリストが1つずつあり、最上位レベルから始めて、左から右、右から左の順に交互に並びます

制約

  • 1 ≤ root.length ≤ 32767
  • 各root[i]は-1または0 ≤ root[i] ≤ 104を満たす値です。
  • ノードの値はそれぞれ異なります。
  • root[0] は決して -1 ではないため、木には少なくとも1つのノードがあります。
  • 配列の末尾には、最後のノードの後に余分な -1 の要素が含まれる場合があります。
  • 空の位置の子もどちらも空で、木のレベル数は最大でも 14 です。

例

入力
root = [8, 12, 5, 1, 9, -1, 14, -1, -1, 4, 2, -1, -1, 11]
出力
[[8], [5, 12], [1, 9, 14], [11, 2, 4]]
説明
左から右へ読むと、各レベルは 8; 12, 5; 1, 9, 14; 4, 2, 11 です。レベル1と3は逆方向に進みます: [5, 12] と [11, 2, 4]。
challenge icon

発展問題

すべての値を逆順にしたり、2つ目のスタックを使ったりせず、各行の最終的な位置に直接配置できますか?

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

テスト #1

テスト #2

テスト #3

引数

root = [8, 12, 5, 1, 9, -1, 14, -1, -1, 4, 2, -1, -1, 11]

期待される出力

[[8], [5, 12], [1, 9, 14], [11, 2, 4]]