Menu
CoddyTech

Left View of Binary Tree

やさしい木の走査キューpython iconjava iconcpp iconc iconjs icon+10

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

木の左側に立ちます。各レベルでは、左端のノードが1つ見え、残りのノードはその後ろに隠れています。上のレベルから順に、見える値を返してください。

関数

leftView(root: integer-array) → integer-array
rootinteger-array
ヒープ順序での木。空の位置には -1
戻り値integer-array
各レベルで最も左にある値。最上位のレベルから順に。

制約

  • 1 ≤ root.length ≤ 32767
  • 各 root[i] は -1 または 0 ≤ root[i] ≤ 104 を満たす値です。
  • ノードの値はそれぞれ異なります。
  • root[0] が -1 になることはないため、ツリーには少なくとも1つのノードがあります。
  • 配列は最後のノード以降に、余分な-1の要素を含む場合があります。
  • 空の位置の子は両方とも空で、ツリーのレベル数は最大でも 14 です。

例

入力
root = [3, 8, 5, -1, -1, -1, 6, -1, -1, -1, -1, -1, -1, 1]
出力
[3, 8, 6, 1]
説明
8 は葉なので、第3レベルと第4レベルには、右の子 5 の下にある 6(インデックス 6)と 1(インデックス 13)だけがあります。それでも、これらは見えています: [3, 8, 6, 1]。
challenge icon

発展問題

レベル d は、インデックス 2^d-1 から 2^(d+1)-2 までを埋めます。キューも再帰も使わず、それらの範囲を走査してビューを構築できますか?パディングされた配列では、コストはどうなりますか?

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

テスト #1

テスト #2

テスト #3

引数

root = [3, 8, 5, -1, -1, -1, 6, -1, -1, -1, -1, -1, -1, 1]

期待される出力

[3, 8, 6, 1]