พื้นหลัง
ต้นไม้ที่ไม่มีป้ายกำกับอาจมีลักษณะเช่นนี้:
o
/ | \
o o o
| / \
o o o
ในการทำให้ต้นไม้นี้เป็นเส้นตรงเราต้องติดป้ายแต่ละโหนดo
ด้วยจำนวนของโหนดลูก:
3
/ | \
1 0 2
| / \
0 0 0
จากนั้นเขียนตัวเลขลงในรายการในลักษณะลมหายใจก่อนหมายถึงบรรทัดต่อบรรทัดและจากซ้ายไปขวา:
[3, 1, 0, 2, 0, 0, 0]
นี่คือการแสดงที่ไม่เหมือนใครและไม่ซ้ำใครของต้นไม้ด้านบนซึ่งหมายความว่าไม่มีต้นไม้บริสุทธิ์ที่แตกต่างกันสองตัวที่จะมีเส้นตรงเหมือนกันและเราสามารถสร้างต้นไม้ดั้งเดิมขึ้นใหม่จากรายการ
แม้ว่าต้นไม้แต่ละต้นจะสอดคล้องกับรายการจำนวนเต็มจำนวนหนึ่ง แต่ไม่ใช่รายการจำนวนเต็มแต่ละรายการที่แสดงถึงต้นไม้เชิงเส้นที่ถูกต้อง: ตัวอย่างเช่น[2, 0, 0, 0]
ไม่ได้เป็นตัวแทนของต้นไม้ที่ถูกต้องถ้าเราพยายามที่จะทำให้เป็นเส้นตรง
[2,0,0,0] -> 2 [0,0,0] -> 2 [0,0] -> 2 [0]
/ \ / \ / \
0 0 0
แต่ยังมี0
เหลืออยู่ในรายการและไม่มีที่จะวาง ในทำนองเดียวกัน[2, 0]
ไม่ได้เป็นต้นไม้เชิงเส้นที่ถูกต้องเช่นกันในขณะที่ต้นไม้ de-linearized มีจุดเด็กที่ว่างเปล่า:
2
/ \
0
งาน
ให้ลิสต์รายการจำนวนเต็มตัดสินใจว่าเป็นลิเนียเรชั่นเชิงเส้นที่ถูกต้องของต้นไม้โดยใช้จำนวนไบต์น้อยที่สุด คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบ
อินพุต: รายการที่ไม่ว่างเปล่าของจำนวนเต็มไม่เป็นลบ
เอาท์พุท: ค่าความจริงถ้ารายการคือการทำให้เป็นเชิงเส้นของต้นไม้ค่าเท็จอื่น ๆ
Testcases
Truthy[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@{+\(_{\}&}/|!}
ฉันคิด?