Menu
CoddyTech

Vertical Order Traversal of a Binary Tree

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

ルートは列 0 にあります。左の子は親より1列左、右の子は親より1列右です。左から右へ、列ごとに1つのリストを返してください。各列ではノードを上から下へ並べ、同じ列かつ同じ深さのノードは値の昇順で並べてください。

関数

verticalTraversal(root: integer-array) → integer-2d-array
rootinteger-array
ヒープ順序の木(空の位置は -1)
戻り値integer-2d-array
列ごとに値のリストを1つずつ、左端の列から順に、それぞれ上から下へ

制約

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

例

入力
root = [5, 2, 9, 4, 7, 1, 6]
出力
[[4], [2], [5, 1, 7], [9], [6]]
説明
列0にはルートの5があり、その2階層下に7と1があります。この2つは列と深さが同じなので、7のほうが左にあるにもかかわらず、1が先に来ます。
challenge icon

発展問題

すべての値は最大でも5000です。この性質を利用して比較ソートを使わずに、O(n + 5000)時間で処理を終えられますか?

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

テスト #1

テスト #2

テスト #3

引数

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

期待される出力

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