Arka fon
Etiketsiz bir ağaç şöyle görünebilir:
o
/ | \
o o o
| / \
o o o
Bu ağacı doğrusallaştırmak için önce her düğümü o
alt düğüm sayısı ile etiketliyoruz :
3
/ | \
1 0 2
| / \
0 0 0
ve sonra sayıları bir satırda ve soldan sağa olacak şekilde, önce nefes nefese bir şekilde yazın:
[3, 1, 0, 2, 0, 0, 0]
Bu, yukarıdaki ağacın benzersiz ve açık bir temsilidir, yani iki farklı saf ağacın aynı doğrusallaştırmaya sahip olmayacağı ve orijinal ağacı listeden yeniden oluşturabileceğimiz anlamına gelir.
Her ağaç belirli bir tamsayı listesine karşılık gelse de, her tamsayı listesi geçerli bir doğrusal ağacı [2, 0, 0, 0]
temsil etmez : Örneğin geçerli bir ağacı temsil etmez, eğer doğrusallaştırmaya çalışırsak bu ağaçla sonuçlanırız
[2,0,0,0] -> 2 [0,0,0] -> 2 [0,0] -> 2 [0]
/ \ / \ / \
0 0 0
ama hala 0
listede bir sol var ve koyacak hiçbir yer yok. Benzer şekilde [2, 0]
, doğrusal olmayan ağaç boş bir alt noktaya sahip olduğundan, geçerli bir ağaç doğrusallaştırma da değildir:
2
/ \
0
Görev
Bir tamsayı listesi verildiğinde, olabildiğince az bayt kullanarak bir ağacın geçerli bir doğrusallaştırması olup olmadığına karar verin. Tam bir program veya işlev yazabilirsiniz.
Girdi: Negatif olmayan tam sayıların boş olmayan bir listesi.
Çıktı: Liste bir ağacın doğrusallaştırılmasıysa doğruluk değeri, aksi halde bir yanlış değer.
testcases
Doğru[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]
Falsy
[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@{+\(_{\}&}/|!}
Bence?