問題一覧 > 通常問題

No.566 だいたい完全二分木

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 256 MB / スペシャルジャッジ問題 (複数の解が存在する可能性があります)
タグ : / 解いたユーザー数 161
作問者 : 紙ぺーぱー / テスター : ixmel
9 ProblemId : 1159 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2016-10-29 02:28:07

問題文

だいたい完全二分木2K1個の頂点からなる二分木であって、木の高さがK 以上 3K 以下であるような二分木である。高さとは各辺の長さを 1 としたときに根から最も遠い頂点までの距離のことを指す。
今日もあなたはだいたい完全二分木1 つ構築することにした。

構築の手順は {1,2,3,,2K1} を並び替えた数列 P1,P2,,P2K1 によって定められる。
具体的な手順としては 0 個の要素からなる二分探索木 TP1,P2,,P2K1 をこの順序で挿入する。
二分探索木 G に値 v を挿入するときのルールは以下のように再帰的に定義される。

  • G に頂点が存在しないならば vG の根にする。
  • G に頂点が存在するならば v と根の値を比較し、 v の方が小さいならば左の部分木に、 そうでないならば右の部分木に挿入する。
K=2 において、例えば、(1,3,2),(2,1,3) から、 以下の図のような二分木がそれぞれ最終的に得られる。
(1,3,2) から得られる二分木は高さが 2 なのでだいたい完全二分木だが、 (2,1,3) から得られる二分木は高さが 1 なのでだいたい完全二分木ではない。

この手順により得られる二分探索木 Tだいたい完全二分木になるような数列をどれか 1 つ求めよ。
解が 1 つ以上存在することが保証される。

入力

K

整数 K(2K12)1 行で与えられる。

出力

条件を満たすような二分木の構築手順を定める数列 P を空白区切りで 1 行に出力せよ。
条件を満たすものであればどれでもよい。

サンプル

サンプル1
入力
2
出力
1 3 2

問題文中で示した通りである。
(1,2,3),(1,3,2),(3,1,2),(3,2,1)4 つにより構築される二分木が高さ 2 の条件を満たす二分木となる。
(2,3,1),(2,1,3) により構築される二分木は高さが 1 のため、条件を満たさない。

サンプル2
入力
3
出力
5 3 2 4 1 6 7

以下のような二分木が得られる。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。