<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0677_-_Nivele_Bin</id>
	<title>0677 - Nivele Bin - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0677_-_Nivele_Bin"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0677_-_Nivele_Bin&amp;action=history"/>
	<updated>2026-05-01T06:38:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0677_-_Nivele_Bin&amp;diff=9802&amp;oldid=prev</id>
		<title>Oros Ioana Diana at 14:25, 18 May 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0677_-_Nivele_Bin&amp;diff=9802&amp;oldid=prev"/>
		<updated>2024-05-18T14:25:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:25, 18 May 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l6&quot;&gt;Line 6:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 6:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Date de ieșire =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Date de ieșire =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Fișierul de ieșire &amp;lt;code&amp;gt;nivelebinOUT.txt&amp;lt;/code&amp;gt; va conține pe prima linie numărul &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, iar pe a doua linie &amp;lt;code&amp;gt;k+1&amp;lt;/code&amp;gt; numere naturale separate prin exact un spațiu, al &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;-lea număr reprezentând numărul de noduri situate pe nivelul &amp;lt;code&amp;gt;i-1&amp;lt;/code&amp;gt; din arbore.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Fișierul de ieșire &amp;lt;code&amp;gt;nivelebinOUT.txt&amp;lt;/code&amp;gt; va conține pe prima linie numărul &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, iar pe a doua linie &amp;lt;code&amp;gt;k+1&amp;lt;/code&amp;gt; numere naturale separate prin exact un spațiu, al &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;-lea număr reprezentând numărul de noduri situate pe nivelul &amp;lt;code&amp;gt;i-1&amp;lt;/code&amp;gt; din arbore&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &quot;Datele nu corespund restrictiilor impuse&quot;&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Restricții și precizări =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Restricții și precizări =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Oros Ioana Diana</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0677_-_Nivele_Bin&amp;diff=9801&amp;oldid=prev</id>
		<title>Oros Ioana Diana at 14:23, 18 May 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0677_-_Nivele_Bin&amp;diff=9801&amp;oldid=prev"/>
		<updated>2024-05-18T14:23:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;//wiki.universitas.ro/index.php?title=0677_-_Nivele_Bin&amp;amp;diff=9801&amp;amp;oldid=9239&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Oros Ioana Diana</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0677_-_Nivele_Bin&amp;diff=9239&amp;oldid=prev</id>
		<title>Oros Ioana Diana: Pagină nouă: == Cerința == Considerăm un arbore binar cu n noduri în care fiecare nod este numerotat de la 1 la n și conține o valoare număr natural. În acest arbore rădăcina este considerată pe nivelul 0, descendenții direcți ai rădăcinii pe nivelul 1, etc. Să se determine numărul de nivele k din arbore și, pentru fiecare nivel i de la 0 la k, numărul de noduri situate pe acel nivel. == Date de intrare == Fișierul de intrare nivelebinin.txt conține pe prima linie num...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0677_-_Nivele_Bin&amp;diff=9239&amp;oldid=prev"/>
		<updated>2024-01-08T20:16:56Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerința == Considerăm un arbore binar cu n noduri în care fiecare nod este numerotat de la 1 la n și conține o valoare număr natural. În acest arbore rădăcina este considerată pe nivelul 0, descendenții direcți ai rădăcinii pe nivelul 1, etc. Să se determine numărul de nivele k din arbore și, pentru fiecare nivel i de la 0 la k, numărul de noduri situate pe acel nivel. == Date de intrare == Fișierul de intrare nivelebinin.txt conține pe prima linie num...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Cerința ==&lt;br /&gt;
Considerăm un arbore binar cu n noduri în care fiecare nod este numerotat de la 1 la n și conține o valoare număr natural. În acest arbore rădăcina este considerată pe nivelul 0, descendenții direcți ai rădăcinii pe nivelul 1, etc. Să se determine numărul de nivele k din arbore și, pentru fiecare nivel i de la 0 la k, numărul de noduri situate pe acel nivel.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare nivelebinin.txt conține pe prima linie numărul n. Fiecare dintre următoarele n linii conține câte 3 numere X st dr; linia i + 1 din fișier conține informațiile despre nodul numerotat cu i: X reprezintă valoare din nod, st reprezintă numărul de ordine al descendentului stâng sau 0 dacă nodul i nu are descendent stâng, iar dr reprezintă numărul de ordine al descendentului drept sau 0 dacă nodul i nu are descendent drept.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire nivelebinout.txt va conține pe prima linie numărul k, iar pe a doua linie k+1 numere naturale separate prin exact un spațiu, al i-lea număr reprezentând numărul de noduri situate pe nivelul i-1 din arbore.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;1 ≤ n ≤ 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*valorile din nodurile arborelui vor fi mai mici sau egale cu 1.000.000&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; nivelebinin.txt&lt;br /&gt;
: 6&lt;br /&gt;
: 2 3 5&lt;br /&gt;
: 6 0 6&lt;br /&gt;
: 1 0 0&lt;br /&gt;
: 7 1 2&lt;br /&gt;
: 4 0 0&lt;br /&gt;
: 10 0 0&lt;br /&gt;
; nivelebinout.txt&lt;br /&gt;
: 3&lt;br /&gt;
: 1 2 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; nivelebinin.txt&lt;br /&gt;
: 7&lt;br /&gt;
: 1 2 3&lt;br /&gt;
: 2 4 0&lt;br /&gt;
: 3 5 6&lt;br /&gt;
: 4 0 0&lt;br /&gt;
: 5 7 0&lt;br /&gt;
: 6 0 0&lt;br /&gt;
: 7 0 0&lt;br /&gt;
; nivelebinout.txt&lt;br /&gt;
: 3&lt;br /&gt;
: 1 2 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0677 - Nivele Bin&lt;br /&gt;
class TreeNode:&lt;br /&gt;
    def __init__(self, value, left=None, right=None):&lt;br /&gt;
        self.value = value&lt;br /&gt;
        self.left = left&lt;br /&gt;
        self.right = right&lt;br /&gt;
&lt;br /&gt;
def read_tree_from_file(file):&lt;br /&gt;
    n = int(file.readline())&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000):&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    nodes = [None]  # index 0 nu este folosit&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        x, st, dr = map(int, file.readline().split())&lt;br /&gt;
        if not (1 &amp;lt;= x &amp;lt;= 1000000):&lt;br /&gt;
            return None&lt;br /&gt;
        if not (0 &amp;lt;= st &amp;lt;= n):&lt;br /&gt;
            return None&lt;br /&gt;
        if not (0 &amp;lt;= dr &amp;lt;= n):&lt;br /&gt;
            return None&lt;br /&gt;
        nodes.append(TreeNode(x, st, dr))&lt;br /&gt;
&lt;br /&gt;
    return nodes&lt;br /&gt;
&lt;br /&gt;
def calculate_levels_and_counts(root, nodes):&lt;br /&gt;
    levels_counts = {}&lt;br /&gt;
    stack = [(root, 0)]  # Stivă de noduri și niveluri&lt;br /&gt;
&lt;br /&gt;
    while stack:&lt;br /&gt;
        node, level = stack.pop()&lt;br /&gt;
&lt;br /&gt;
        if level not in levels_counts:&lt;br /&gt;
            levels_counts[level] = 1&lt;br /&gt;
        else:&lt;br /&gt;
            levels_counts[level] += 1&lt;br /&gt;
&lt;br /&gt;
        if nodes[node].left:&lt;br /&gt;
            stack.append((nodes[node].left, level + 1))&lt;br /&gt;
        if nodes[node].right:&lt;br /&gt;
            stack.append((nodes[node].right, level + 1))&lt;br /&gt;
&lt;br /&gt;
    return levels_counts&lt;br /&gt;
&lt;br /&gt;
def check_restrictions(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 1000&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;#039;nivelebinin.txt&amp;#039;, &amp;#039;r&amp;#039;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        if not check_restrictions(n):&lt;br /&gt;
            print(&amp;quot;false&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        nodes = read_tree_from_file(file)&lt;br /&gt;
        if nodes is None:&lt;br /&gt;
            print(&amp;quot;false&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        root = 1  # Rădăcina arborelui&lt;br /&gt;
        levels_counts = calculate_levels_and_counts(root, nodes)&lt;br /&gt;
&lt;br /&gt;
        k = len(levels_counts) - 1  # Numărul de niveluri&lt;br /&gt;
        counts_list = [levels_counts[i] for i in range(k + 1)]&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;#039;nivelebinout.txt&amp;#039;, &amp;#039;w&amp;#039;) as file:&lt;br /&gt;
        file.write(str(k) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
        file.write(&amp;#039; &amp;#039;.join(map(str, counts_list)))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
Exemplul corespunde arborelui de mai jos, în care au fost marcate cu albastru valorile din noduri, iar cu roșu numerele de ordine ale nodurilor.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Arborele conține trei nivele:&lt;br /&gt;
*nivelul 0 conține doar rădăcina, nodul numerotat cu 4&lt;br /&gt;
*nivelul 1 conține două noduri, cele numerotate cu 1 2&lt;br /&gt;
*nivelul 2 conține trei noduri, cele numerotate cu 3 5 6&lt;/div&gt;</summary>
		<author><name>Oros Ioana Diana</name></author>
	</entry>
</feed>