Menu
CoddyTech

Bottom View of Binary Tree

配列 root は二分木を保持しています。ルートはインデックス 0 にあり、インデックス i の子は 2i+1(左)と 2i+2(右)です。空の位置には -1 が入り、末尾に余分な -1 が含まれる場合もあります。

ルートは列 0 にあります。左へ進むと列が1つ左に移動し、右へ進むと列が1つ右に移動します。下から見ると、各列では最も深いノードが見えます。同じ深さに複数ある場合は、左から右へ読んだときに最後に来るノード(インデックスが大きい方)が見えます。見える値を、最も左の列から順に返してください。

関数

bottomView(root: integer-array) → integer-array
rootinteger-array
ヒープ順で表した木(空の位置は -1)
戻り値integer-array
各列を下から見た値。左端の列から順に。

制約

  • 1 ≤ root.length ≤ 32767
  • 各root[i]は-1、または0 ≤ root[i] ≤ 104を満たす値であり、同じ値は2回以上現れません。
  • root[0] は決して -1 ではないため、木には少なくとも1つのノードがあります。
  • 配列は最後のノードの後に余分な -1 のエントリが続く場合があります。
  • 空の位置の子は両方とも空であり、木のレベル数は最大でも 14 です。

例

入力
root = [5, 2, 9, 4, 7, 1, 6]
出力
[4, 2, 1, 9, 6]
説明
列 0 には 5 があり、2 レベル下には 7(インデックス 4)と 1(インデックス 5)があります。共有レベルでは 1 のほうが後にあるため、表示されます。列 -2、-1、1、2 にはそれぞれ 4、2、9、6 があります。
challenge icon

発展問題

ある列の最深レベルで同点の場合に、同点のすべてのノードを左から右の順に返すには、幅優先版をどのように変更すればよいでしょうか?例1の列0は何を返すでしょうか?

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

テスト #1

テスト #2

テスト #3

引数

root = [5, 2, 9, 4, 7, 1, 6]

期待される出力

[4, 2, 1, 9, 6]