Menu
CoddyTech

Boundary Traversal of Binary Tree

ふつう木の走査python iconjava iconcpp iconc iconjs icon+10

配列 root には、二分木がレベル順で格納されています。根はインデックス 0 にあり、インデックス i のノードの子は 2i+1(左)と 2i+2(右)です。空の位置には -1 を使い、末尾に余分な -1 の要素が含まれる場合もあります。葉とは、子を持たないノードです。

根から反時計回りに境界を返してください。

  1. 根。
  2. 左境界(上から下へ):根の左の子から始め、左の子があれば左の子へ、なければ右の子へ進みます。葉の手前で止めます。
  3. すべての葉(左から右へ)。
  4. 右境界(下から上へ):左境界を反転したものを、根の右の子からたどります。

同じノードを2回列挙しないため、ノードが1つだけの木では根だけを返します。

関数

boundaryTraversal(root: integer-array) → integer-array
rootinteger-array
空の位置には -1 を使い、二分木をレベル順に
戻り値integer-array
境界値を、根から反時計回りに

制約

  • 1 ≤ root.length ≤ 32767
  • 各root[i]は-1、または0 ≤ root[i] ≤ 105を満たす値です。
  • root[0] は決して -1 ではないため、木には少なくとも 1 つのノードがあります。
  • 配列は、最後のノードの後に余分な -1 エントリが続いて終わる場合があります。
  • 空の位置の子はどちらも空であり、深さは最大でも 14 です。
  • ノードの値はそれぞれ異なります。

例

入力
root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]
出力
[7, 3, 1, 4, 6, 8, 9]
説明
ルートの 7 の後、左境界は 3 です。その子の 1 は葉です。葉は 1、4、6、8 です。右境界は 9 で、葉の 8 の上にあります。
challenge icon

発展問題

境界を時計回りに列挙するにはどうすればよいでしょうか。ルート、右端を上から下へ、葉を右から左へ、その後左端を下から上へ、という順ですか?

コードをリセット
def boundaryTraversal(root):
    # ここにコードを記述してください

テスト #1

テスト #2

テスト #3

引数

root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]

期待される出力

[7, 3, 1, 4, 6, 8, 9]