バックグラウンド
ラベルのないツリーは次のようになります。
o
/ | \
o o o
| / \
o o o
このツリーを線形化するには、まず各ノードo
にその子ノードの数でラベルを付けます。
3
/ | \
1 0 2
| / \
0 0 0
そして、一行ごとに、左から右へという意味で、数字をリストに一気に書きます。
[3, 1, 0, 2, 0, 0, 0]
これは、上記のツリーの一意かつ明確な表現です。つまり、2つの異なる純粋なツリーが同じ線形化を持たず、リストから元のツリーを再構築できることを意味します。
各ツリーは特定の整数リストに対応しますが、各整数リストは有効な線形化されたツリーを[2, 0, 0, 0]
表すわけではありません。たとえば、有効なツリーを表しません。
[2,0,0,0] -> 2 [0,0,0] -> 2 [0,0] -> 2 [0]
/ \ / \ / \
0 0 0
ただし0
、リストにはまだ左があり、配置する場所はありません。同様に[2, 0]
、非線形化ツリーには空の子スポットがあるため、有効なツリー線形化でもありません。
2
/ \
0
仕事
整数リストが与えられたら、それが可能な限り少ないバイトを使用してツリーの有効な線形化であるかどうかを決定します。完全なプログラムまたは関数を作成できます。
入力: 負でない整数の空でないリスト。
出力: リストがツリーの線形化の場合は真理値、それ以外の場合は偽値。
テストケース
真実の[0]
[2, 0, 0]
[1, 1, 1, 1, 1, 0]
[3, 1, 0, 2, 0, 0, 0]
[2, 0, 2, 2, 0, 0, 2, 0, 0]
[3, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0]
[1, 5, 3, 0, 2, 1, 4, 0, 1, 0, 0, 2, 1, 0, 0, 1, 1, 0, 0, 0, 0, 2, 1, 0, 0, 1, 0]
偽物
[0, 1]
[2, 0]
[2, 0, 0, 0]
[1, 0, 1]
[3, 2, 1, 0]
[2, 0, 0, 2, 0, 0]
[4, 1, 0, 3, 0, 0, 0, 0]
[4, 2, 0, 3, 1, 0, 0, 0, 0, 0]
{X0@{+\(_{\}&}/|!}
おもう?