0650 – kNivel
Enunț[edit | edit source]
Într-un arbore cu rădăcină, spunem că rădăcina este pe nivelul 1
, fiii rădăcinii pe nivelul 2
, fiii fiilor rădăcinii pe nivelul 3
, etc.
Cerința[edit | edit source]
Se dă vectorul de tați al unui arbore cu rădăcină cu n
noduri și o valoare k
. Determinați nodurile situate pe nivelul k
în arbore.
Date de intrare[edit | edit source]
Fișierul de intrare knivelIN.txt
conține pe prima linie numărul de noduri n
și valoarea k
. Pe linia următoare se află vectorul de tați al arborelui, valorile fiind separate prin spații.
Date de ieșire[edit | edit source]
Fișierul de ieșire knivelOUT.txt
va conține pe prima linie, în ordine crescătoare, nodurile situate pe nivelul k
în arbore.În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Nu corespunde restricțiilor impuse".
Restricții și precizări[edit | edit source]
1 ≤ n ≤ 100
- în vectorul de tați rădăcina este marcată cu
0
- pe nivelul
k
va exista cel puțin un nod
Exemplul 1:[edit | edit source]
knivelIN.txt
8 3 4 3 0 3 2 1 2 1
knivelOUT.txt
1 5 7
Exemplul 2:[edit | edit source]
knivelIN.txt
101 2 4 3 0 3 2 1 2 1
knivelOUT.txt
Datele nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def verificare_restrictii(n, k):
if 1 <= n <= 100: return True else: return False
def gaseste_noduri_pe_nivel(tati, nivel):
noduri_pe_nivel = [] for i in range(len(tati)): nivel_nod_curent = 1 # Nivelul rădăcinii parinte_curent = tati[i]
while parinte_curent != 0: parinte_curent = tati[parinte_curent - 1] nivel_nod_curent += 1
if nivel_nod_curent == nivel: noduri_pe_nivel.append(i + 1)
return noduri_pe_nivel
def main():
# Citirea datelor de intrare din fișier with open("knivelIN.txt", "r") as fisier_intrare: n, k = map(int, fisier_intrare.readline().split()) tati = list(map(int, fisier_intrare.readline().split()))
# Verificarea restricțiilor if not verificare_restrictii(n, k): with open("knivelOUT.txt", "w") as fisier_iesire: fisier_iesire.write("Datele nu corespund restrictiilor impuse") return
# Găsirea nodurilor de pe nivelul k noduri_pe_nivel_k = gaseste_noduri_pe_nivel(tati, k)
# Scrierea rezultatului în fișierul de ieșire with open("knivelOUT.txt", "w") as fisier_iesire: if noduri_pe_nivel_k: fisier_iesire.write(" ".join(map(str, noduri_pe_nivel_k))) else: fisier_iesire.write("Nu există noduri pe nivelul specificat")
if __name__ == "__main__":
main()
</syntaxhighlight>