<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Mehrwegbaum I , initialiseren und speichern]]></title><description><![CDATA[<p>Ich lese hier schon eine ganze Zeitlang mit und fand auch ziemlich schnell Lösungen für meine kleinen Programme die ich im Alltag verzapfe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Allerdings bastel ich seit Freitag an einem Programm was mir überhaupt nicht gelingen will. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Frage: Um was geht es?</p>
<p>Es geht um einen Stammbaum. Der Baum ist nicht binär und daher mehrwegig.</p>
<p><em>Da man überall zum Thema Binärbäume kleinere Bildchen präsentiert, hab ich eins für den Stammbaum gebastelt.</em> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p><a href="http://home.arcor.de/connyr23/fam2.jpg" rel="nofollow">http://home.arcor.de/connyr23/fam2.jpg</a> &lt;- Image</p>
<p>Wie versuchst du es?</p>
<p>In meinem Beispiel ist der max. Grad der Kindsknoten bekannt [max_children]. Darum versuche ich ein Array von Kindsknoten in den Knoten zu legen.</p>
<p>Wie weit bist du?</p>
<p><strong>-</strong> Der Stammbaum wird von mir aus einer Datei ausgelesen. (<a href="http://home.arcor.de/connyr23/tree.txt" rel="nofollow">http://home.arcor.de/connyr23/tree.txt</a>)<br />
Diese ist nach der pre-order Methode aufgebaut. Das bedeutet der Baum wird über die Wurzel von Links nach rechts &quot;aufgebaut&quot;.</p>
<blockquote>
<p>Bsp.: // Teilbaum von Rudi<br />
Rudi<br />
2<br />
Otto<br />
2<br />
Gabi<br />
0<br />
Anna<br />
1<br />
Olga<br />
0<br />
- cut -</p>
</blockquote>
<p>Von der Wurzel Rudi, gehen 2 Äste weg. Rudi's linker Ast führt zum inneren Knoten Otto von dem wieder 2 Aste weg führen. Der linke Ast von Otto führt zu Gabi. Da Nach Gabi eine 0 folgt, bedeutet dies, Gabi ist ein Blatt und enthält keine weiteren Knoten mehr. Wir springen jetzt zum letzten offenen inneren Knoten und zwar Otto. Von Votto führt ein weiterer Ast weg zu Anna. Von anna führt ein nur ein Ast weg und dieser geht zu Olga, elche auch ein Blatt ist da nach ihr kein Knoten mehr folgt.</p>
<p>Rudi's rechter Teilbaum baut sich dann genauso auf.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
using namespace std;

const int max_children = 4;

struct node {
    string data;
    node* children[max_children];
};

struct tree {
    node* root;
};

int main(int argc, char* argv[]){

  string name;
  int number;

  FILE* datei;

  datei = fopen(&quot;tree.txt&quot;, &quot;r&quot;);

  if ( !datei)
  {
    cerr &lt;&lt; &quot;Fehler beim öffnen der Datei.&quot;;
  }  

  while(fscanf(datei, &quot;%s%i&quot;, &amp;name, &amp;number) != EOF)
  {
   // --- noch offen  --- 
  }
  fclose(datei);

  return 0;
}
</code></pre>
<p>Hier sitz ich seit 2 Tagen. Es gelingt mir nicht den Stammbaum zu initalisieren und auf dem Bildschirm richtig auszugeben. Aber ich versuch es weiter. Wäre toll wenn mir jemand etwas mit unter die Arme greifen könnte.</p>
<p>Erläuterungen, Links etc. sind gerne willkommen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/202600/mehrwegbaum-i-initialiseren-und-speichern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 05:46:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202600.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Jan 2008 13:43:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Sun, 13 Jan 2008 13:43:42 GMT]]></title><description><![CDATA[<p>Ich lese hier schon eine ganze Zeitlang mit und fand auch ziemlich schnell Lösungen für meine kleinen Programme die ich im Alltag verzapfe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Allerdings bastel ich seit Freitag an einem Programm was mir überhaupt nicht gelingen will. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Frage: Um was geht es?</p>
<p>Es geht um einen Stammbaum. Der Baum ist nicht binär und daher mehrwegig.</p>
<p><em>Da man überall zum Thema Binärbäume kleinere Bildchen präsentiert, hab ich eins für den Stammbaum gebastelt.</em> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p><a href="http://home.arcor.de/connyr23/fam2.jpg" rel="nofollow">http://home.arcor.de/connyr23/fam2.jpg</a> &lt;- Image</p>
<p>Wie versuchst du es?</p>
<p>In meinem Beispiel ist der max. Grad der Kindsknoten bekannt [max_children]. Darum versuche ich ein Array von Kindsknoten in den Knoten zu legen.</p>
<p>Wie weit bist du?</p>
<p><strong>-</strong> Der Stammbaum wird von mir aus einer Datei ausgelesen. (<a href="http://home.arcor.de/connyr23/tree.txt" rel="nofollow">http://home.arcor.de/connyr23/tree.txt</a>)<br />
Diese ist nach der pre-order Methode aufgebaut. Das bedeutet der Baum wird über die Wurzel von Links nach rechts &quot;aufgebaut&quot;.</p>
<blockquote>
<p>Bsp.: // Teilbaum von Rudi<br />
Rudi<br />
2<br />
Otto<br />
2<br />
Gabi<br />
0<br />
Anna<br />
1<br />
Olga<br />
0<br />
- cut -</p>
</blockquote>
<p>Von der Wurzel Rudi, gehen 2 Äste weg. Rudi's linker Ast führt zum inneren Knoten Otto von dem wieder 2 Aste weg führen. Der linke Ast von Otto führt zu Gabi. Da Nach Gabi eine 0 folgt, bedeutet dies, Gabi ist ein Blatt und enthält keine weiteren Knoten mehr. Wir springen jetzt zum letzten offenen inneren Knoten und zwar Otto. Von Votto führt ein weiterer Ast weg zu Anna. Von anna führt ein nur ein Ast weg und dieser geht zu Olga, elche auch ein Blatt ist da nach ihr kein Knoten mehr folgt.</p>
<p>Rudi's rechter Teilbaum baut sich dann genauso auf.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
using namespace std;

const int max_children = 4;

struct node {
    string data;
    node* children[max_children];
};

struct tree {
    node* root;
};

int main(int argc, char* argv[]){

  string name;
  int number;

  FILE* datei;

  datei = fopen(&quot;tree.txt&quot;, &quot;r&quot;);

  if ( !datei)
  {
    cerr &lt;&lt; &quot;Fehler beim öffnen der Datei.&quot;;
  }  

  while(fscanf(datei, &quot;%s%i&quot;, &amp;name, &amp;number) != EOF)
  {
   // --- noch offen  --- 
  }
  fclose(datei);

  return 0;
}
</code></pre>
<p>Hier sitz ich seit 2 Tagen. Es gelingt mir nicht den Stammbaum zu initalisieren und auf dem Bildschirm richtig auszugeben. Aber ich versuch es weiter. Wäre toll wenn mir jemand etwas mit unter die Arme greifen könnte.</p>
<p>Erläuterungen, Links etc. sind gerne willkommen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435877</guid><dc:creator><![CDATA[connyr23]]></dc:creator><pubDate>Sun, 13 Jan 2008 13:43:42 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Sun, 13 Jan 2008 14:20:33 GMT]]></title><description><![CDATA[<p>Wow, so eine gut erklärte Fragestellung hab ich lange nicht mehr gesehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>So, erstmal eine Anmerkung zu deinem Code: Irgendwie scheinst du C und C++ zu mischen, was an sich nicht besonders gut ist.</p>
<p>Du hast ja (zum Glück) schon eine recht genaue Vorstellung, wie der Baum aufgebaut werden soll. Ein paar Sachen würde ich trotzdem abändern, z.B. dass die Anzahl der Kinder nicht begrenzt ist. Variable Arrays lassen sich z.B. wunderbar mit dem std::vector darstellen ( <code>vector&lt;node&gt; children;</code> ).<br />
Desweiteren würde ich erst die komplette Textdatei in ein String-Array einlesen. Müsste es wunderbar viele Beispiele dazu im Forum geben oder auch in Tutorials, sähe etwa so aus:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;
using namespace std;
...
vector&lt;string&gt; lines;
ifstream file( &quot;dateiname&quot; );
if ( ! file )
    cerr &lt;&lt; &quot;fehler bla&quot; &lt;&lt; endl;
else
{
    // Schleife zum auslesen von file in lines
}
</code></pre>
<p>So, und dann könntest du dir erstmal einen <em>genauen</em> Algorithmus ausdenken, also die Vorgehensweise, wie die Knoten etabliert werden. Von der Formulierung zum Source-Code ist es dann ein Kinderspiel <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Übrigens: Zum Formulieren des Algorithmus ist es meist am Einfachsten, wenn du dir aus der Liste auf dem Papier den Baum aufbaust und dabei jeden (wirklich jeden) Schritt, den du dabei geistig und körperlich machst, aufschreibst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435894</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 13 Jan 2008 14:20:33 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Sun, 13 Jan 2008 14:29:35 GMT]]></title><description><![CDATA[<p>Nur ein Hinweis: bau den Algorithmus rekursiv auf. Da die Die Kinder hier ihre Eltern nicht kennen, ist ein iterativer Algorithmus etwas umständlich zu formulieren.</p>
<p>Hinsichtlich der Organisation (vector&lt;node&gt; statt array aus Zeigern) schließe ich mich Badestrand an.</p>
<pre><code class="language-cpp">struct node {
    string data;
    std::vector&lt;node&gt; children;
};
</code></pre>
<p>Damit hast du keine künstliche Beschränkung der Kinderanzahl und der ganze Baum ist auch ohne Weiteres kopierbar. Generell läuft etwas falsch, wenn du bereits bei so einem einfachen Problem mit rohen Arrays und Zeigern anfängst. Es wird dann nicht mehr besser werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435901</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 13 Jan 2008 14:29:35 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Sun, 13 Jan 2008 18:03:25 GMT]]></title><description><![CDATA[<blockquote>
<p>Wow, so eine gut erklärte Fragestellung hab ich lange nicht mehr gesehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Ich sitz auch schon seit Freitg drann. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Warten wir mal ab bis dann die OOP dran kommt. *hust*</p>
<blockquote>
<p>So, erstmal eine Anmerkung zu deinem Code: Irgendwie scheinst du C und C++ zu mischen, was an sich nicht besonders gut ist.</p>
</blockquote>
<p>Das Problem für mich ist viel mehr eine klare Linie zwischen den beiden Sprachen zu finden, in Büchern die als Titel &quot;c/c++&quot; haben, mißbrachen offensichlich die Richtlinien. Und sowas nehme ich mir dann sicherlich unbewußt an(ohne den unterschied zu kennen). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Manches ist für mich in C verständlicher aber in c++ schnellerer zu tippen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>So nun wieder zum Programm.</p>
<blockquote>
<p>Nur ein Hinweis: bau den Algorithmus rekursiv auf. Da die Die Kinder hier ihre Eltern nicht kennen, ist ein iterativer Algorithmus etwas umständlich zu formulieren.</p>
</blockquote>
<p>Ich hatte mir dahingegend auch schon meine Gedanken gemacht. Allerdings setzte das wiederum die initialisierung vorraus. Um mit dem -bereits eingelesenen und iniialisierten- Baum, Begriffe wie Tiefe,Anzahl d.Knoten zu demonstrieren. dachte ich an folgende Funktion:</p>
<pre><code class="language-cpp">unsigned int treesize(node* proot)
{
     unsigned int size = 0; // leerer Baum
     if (proot != NULL) // Fallunterscheidung
     {
       // Reduktionsfall
       size++; 
       for (unsigned int son=0; son &lt; max_children; son++)
       {
         // jeder Unterbaum ist kleiner als gesamter Baum!
         size += size(proot-&gt;children[son]);
       }
     }
     return size;
}
</code></pre>
<p>Aber das wäre halt erst das nächste.</p>
<p>Ich bekomme die Kurve nicht bei:</p>
<p>- ausgelesene Wurzel<br />
- ausgelesene Anzahl der Kinder</p>
<p>- prüfe ob links 'null ist' wenn ja links lang, ansonsten links+1<br />
- unter baum erstellen</p>
<p>- am Blatt angekommen -&gt; gehe zurück zum letzten OFFNEN Unterbaum.</p>
<p>und das rekursiv. Da scheitere ich momentan. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Ich habe den Quellcode abgändert und eure Vorschläge, für dich ich mich bedanken möchte, mit eingebaut.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
using namespace std;

struct node {
    string data;
    std::vector&lt;node&gt; children;
};

struct tree {
    node* root;
};

int main(int argc, char* argv[]){

  string name;
  int number;
  vector&lt;string&gt; lines;
  ifstream file(&quot;tree.txt&quot;);

  if ( !File)
  {
    cerr &lt;&lt; &quot;Fehler beim öffnen der Datei.&quot;;
  }else{
    while(getline(file, name))
    {
       lines.push_back( name );
    }
  }  

  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1436036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436036</guid><dc:creator><![CDATA[connyr23]]></dc:creator><pubDate>Sun, 13 Jan 2008 18:03:25 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Sun, 13 Jan 2008 18:05:41 GMT]]></title><description><![CDATA[<blockquote>
<p>Wow, so eine gut erklärte Fragestellung hab ich lange nicht mehr gesehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Ich sitz auch schon seit Freitg drann. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Warten wir mal ab bis dann die OOP dran kommt. *hust*</p>
<blockquote>
<p>So, erstmal eine Anmerkung zu deinem Code: Irgendwie scheinst du C und C++ zu mischen, was an sich nicht besonders gut ist.</p>
</blockquote>
<p>Das Problem für mich ist viel mehr eine klare Linie zwischen den beiden Sprachen zu finden, in Büchern die als Titel &quot;c/c++&quot; haben, mißbrachen die offensichlich die Richtlinien. Und sowas nehme ich mir dann sicherlich unbewußt an(ohne den Unterschied zu kennen). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Manches ist für mich in C verständlicher aber in c++ schnellerer zu tippen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>So nun wieder zum Programm.</p>
<blockquote>
<p>Nur ein Hinweis: bau den Algorithmus rekursiv auf. Da die Die Kinder hier ihre Eltern nicht kennen, ist ein iterativer Algorithmus etwas umständlich zu formulieren.</p>
</blockquote>
<p>Ich hatte mir dahingegend auch schon meine Gedanken gemacht. Allerdings setzte das wiederum die initialisierung voraus. Um mit dem -bereits eingelesenen und iniialisierten- Baum, Begriffe wie Tiefe,Anzahl d.Knoten zu demonstrieren. dachte ich an folgende Funktion:</p>
<pre><code class="language-cpp">unsigned int treesize(node* proot)
{
     unsigned int size = 0; // leerer Baum
     if (proot != NULL) // Fallunterscheidung
     {
       // Reduktionsfall
       size++; 
       for (unsigned int son=0; son &lt; max_children; son++)
       {
         // jeder Unterbaum ist kleiner als gesamter Baum!
         size += size(proot-&gt;children[son]);
       }
     }
     return size;
}
</code></pre>
<p>Aber das wäre halt erst das nächste.</p>
<p>Ich bekomme die Kurve nicht bei:</p>
<p>- ausgelesene Wurzel<br />
- ausgelesene Anzahl der Kinder</p>
<p>- prüfe ob links 'null ist' wenn ja links lang, ansonsten links+1<br />
- unter baum erstellen</p>
<p>- am Blatt angekommen -&gt; gehe zurück zum letzten OFFNEN Unterbaum.</p>
<p>und das rekursiv. Da scheitere ich momentan. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Ich habe den Quellcode abgändert und eure Vorschläge, für dich ich mich bedanken möchte, mit eingebaut.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
using namespace std;

struct node {
    string data;
    std::vector&lt;node&gt; children;
};

struct tree {
    node* root;
};

int main(int argc, char* argv[]){

  string name;
  int number;
  vector&lt;string&gt; lines;
  ifstream file(&quot;tree.txt&quot;);

  if ( !File)
  {
    cerr &lt;&lt; &quot;Fehler beim öffnen der Datei.&quot;;
  }else{
    while(getline(file, name))
    {
       lines.push_back( name );
    }
  }  

  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1436038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436038</guid><dc:creator><![CDATA[connyr23]]></dc:creator><pubDate>Sun, 13 Jan 2008 18:05:41 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Sun, 13 Jan 2008 18:17:06 GMT]]></title><description><![CDATA[<p>Na das sieht doch jetzt schon richtig gut aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Also ich bin das mal auf dem Papier durchgegangen, sah etwa so aus:</p>
<pre><code>Eingabe:
Rudi
2
Otto
2
Gabi
0
Anna
1
Olga
0
Luci
3
Karl
0
Paul
1
Egon
0
Ilse
0

Anfang:
Aktueller Knoten = root

Namen lesen -&gt; &quot;Rudi&quot;
Zahl lesen -&gt; &quot;2&quot;
Name von aktuellem Knoten = &quot;Rudi&quot;
Zahl ist größer 0, also Kind anlegen, Zahl=Zahl-1, aktueller Knoten=angelegtes Kind

    Rudi(1)
   /
Kind*

    Namen lesen -&gt; &quot;Otto&quot;
    Zahl lesen -&gt; &quot;2&quot;
    Name von aktuellem Knoten = &quot;Otto&quot;
    Zahl ist größer 0, also Kind anlegen, Zahl=Zahl-1, aktueller Knoten=angelegtes Kind

    Rudi(1)
   /
Otto(1)
 |
Kind*

        Namen lesen -&gt; &quot;Gabi&quot;
        Zahl lesen -&gt; &quot;0&quot;
        Name von aktuellem Knoten = &quot;Gabi&quot;
        Zahl ist = 0, also zum vorherigen Zustand zurückgehen (aktueller Knoten=Vater von Gabi)

    Rudi(1)
  / 
Otto(1)* 
 |
Gabi(0)

    Namen lesen -&gt; &quot;Anna&quot;
    Zahl lesen -&gt; &quot;1&quot;
    Zahl ist größer 0, also Kind anlegen, Zahl=Zahl-1, aktueller Knoten=angelegtes Kind

    Rudi(1)
  / 
Otto(0)--
 |       \
Gabi(0)   Kind*
</code></pre>
<p>usw. Das Sternchen soll den aktuellen Knoten markieren. Hoffe das hilft dir weiter <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436044</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 13 Jan 2008 18:17:06 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Sun, 13 Jan 2008 22:53:37 GMT]]></title><description><![CDATA[<blockquote>
<p>Also ich bin das mal auf dem Papier durchgegangen,</p>
</blockquote>
<p>Danke. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Nun wird es halt n bissel wacklig für mich. Aber ich versuch es einfach mal.</p>
<blockquote>
<p>Aktueller Knoten = root</p>
</blockquote>
<pre><code class="language-cpp">#include // ...

string name. int number;

struct tree *einordnen(struct tree *knot_zeig);

int main(void){

struct tree *wurzel;
wurzel = NULL;

}
</code></pre>
<blockquote>
<p>Namen lesen -&gt; &quot;Rudi&quot;<br />
Zahl lesen -&gt; &quot;2&quot;<br />
Name von aktuellem Knoten = &quot;Rudi&quot;<br />
Zahl ist größer 0, also Kind anlegen, Zahl=Zahl-1, aktueller Knoten=angelegtes Kind</p>
</blockquote>
<pre><code class="language-cpp">struct tree *wurzel;
wurzel = NULL;

for(unsigned int i = 0; i &lt; lines.size(); i++)
{
    // einlesen des Namens und der Kindsanzahl

    name = lines[i];
    zahl = stringzuint(lines[i++]);
    i++;

    wurzel = einordnen(wurzel);
}

struct tree *einordnen(struct tree *knot_zeig){

   if(knot_zeig = NULL)
   {
         knot_zeig = (struct tree *)malloc(sizeof(struct tree));
         if(knot_zeig == NULL) {
            cout &lt;&lt; &quot;Speicherplatzmangel&quot; &lt;&lt; endl;
            exit(1);
         }
         knot_zeig-&gt;root-&gt;data = name;

           if(zahl &gt; 0)
            if(int i = 0; i &lt; zahl; i++)
             knot_zeig-&gt;root-&gt;data-&gt;children[i];
         zahl--;
    }
    return(knot_zeig);

}

int stringzuint(string z){

    int t;
    istring inStream(z);
    inStream &gt;&gt; t;

    return t;

}
</code></pre>
<p>Da bin ich mir noch sehr sehr unsicher. Die Variablen Name und Zahl hab ich erstmal global gemacht und die funktion stringzuint(), wandelt mir die eingelesene 'Zahl' um.</p>
<p>Kannst du mal bitte drüber schaun Badestrand? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436157</guid><dc:creator><![CDATA[connyr23]]></dc:creator><pubDate>Sun, 13 Jan 2008 22:53:37 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Sun, 13 Jan 2008 23:35:37 GMT]]></title><description><![CDATA[<p>Ich sage mal: <em>Fast</em> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<pre><code class="language-cpp">// Damit das mit dem &quot;nächsten String holen&quot; und &quot;nächste Zahl holen&quot; auch schön einfach ist:
class FileHoster
{
    vector&lt;string&gt; lines;
    vector&lt;string&gt;::iterator iter;

    FileHoster( const string&amp; path )
    {
        // Datei laden in &quot;lines&quot;
        // &quot;iter&quot; auf das erste Element von lines setzen
    }

    string getName()
    {
        // Wirft eine exception, wenn kein Element mehr da ist (also wenn &quot;iter==lines.end()&quot;)
        // gibt das aktuelle Element hinter &quot;iter&quot; zurück
        // vor dem zurückgeben wird aber der &quot;iter&quot;-Iterator noch auf's nächste Element geschoben
    }

    unsigned int getNumber()
    {
        // Holt den nächsten String mittels der Funktion &quot;getName&quot;,
        //   wandelt ihn in eine Zahl um und gibt diese zurück
    }
};

struct node
{
    string data;
    vector&lt;node&gt; children;
};

// Der Einfachheit halber haben wir jetzt einfach mal keine tree-Struktur. Falls du doch eine haben willst,
//   kannst du in &quot;main&quot; auch sowas machen:
// tree t;
// t.root = new node();
// readTree( file, *t.root );

/*struct tree
{
    node* root;
};*/

void readTree( FileHoster&amp; hoster, node&amp; aktueller_knoten )
{
    // Namen lesen
    strig name = hoster.getNam();

    // Zahl lesen
    unsignedint children_to_red = hoster.gtNumber();

    // Name von aktuellem Knoten = &quot;...&quot;
    aktuellr_knoten.data = name;

    // Zahl ist = 0, also zum vorherigen Zustand zurückgehen (aktueller Knoten=Vater von diesem)
    // Hiermit wird dahin zurückgegangen, von wo die Funktion aufgerufen wurde. Diese Funktion hat
    //   dann ja wieder ihren &quot;alten&quot; aktueller_knoten-Parameter
    if ( children_t_read == 0 )
        return;

    // Zahl ist größer 0, also Kind anlegen, Zahl=Zahl-1, aktueller Knoten=angelegtes Kind
    // Hierhin kommt der Code ja nur, wenn children_to_read &gt;0 ist, deshalb brauchen wir auch keine Abfrage mehr
    while ( childen_to_read &gt; 0 )
    {
        // Kind anlegen
        node chil;

        // Zahl = Zahl - 1
        children_o_read--;

        // aktueller Knoten = angelegtes Kind
        // In der aufgerufenen Funktion ist aktueller_knoten dann ja unser &quot;child&quot; hier
        readTreeh( hostil, child );

        // Und das Kind noch in die Liste dazunehmen, muss aber nach readTree geschehen, da dabei
        //   eine Kopie des Kindes gemacht wird.
        aktueller_knoten.phush_back( child );
    }
}

main-Funktion:
    FileHoster file( &quot;C:/Datei.txt&quot; );
    node mytree;
    readTree( file, mytree );
    // Und jetzt noch irgendwie ausgeben :)
</code></pre>
<p>Oh, und noch ein Zusatz: Ich hatte am Anfang (eigentlich sogar recht lange) auch ziemlich Schwierigkeiten mit dem &quot;C++ gegen C&quot; -Krams, ist aber auch nicht so schlimm, nur die 'vector'en, 'string's usw sind schon recht komfortabel <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Und Iteratoren sind hier noch kurz erklärt: <a href="http://www.kharchi.eu/wiki/doku.php?id=cpp:std:iterator" rel="nofollow">http://www.kharchi.eu/wiki/doku.php?id=cpp:std:iterator</a> (sind ja eigentlich auch nur Zeiger)</p>
<p>edit: Hab extra einige kleine Rechtschreibfehler in den Code gehauen, damit du auch noch was zu tun hast :p Und um die Klasse &quot;FileHoster&quot; zu füllen, war ich jetzt einfach mal zu faul, aber dir soll ja auch nicht langweilig werden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Ich hab's übrigens nicht getestet, kann also was falsch sein, und die Abfrage auf 0 und die while-Schleife kannst du auch zusammenfassen, da diese ja gar nicht durchlaufen wird, wenn children_to_read null ist.</p>
<p>edit nummero 2: Du könntest die Funktion &quot;readTree&quot; auch als Memberfunktion von &quot;node&quot; machen, dann hast du einen Parameter weniger und irgendwie gehörts ja auch thematisch da rein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436165</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 13 Jan 2008 23:35:37 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Mon, 14 Jan 2008 09:11:10 GMT]]></title><description><![CDATA[<p>dumme frage:<br />
wäre nicht ein</p>
<pre><code class="language-cpp">vector&lt;node *&gt; children;
</code></pre>
<p>sinnvoller?<br />
Dann musste gar nix kopieren, außer dem Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436220</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Mon, 14 Jan 2008 09:11:10 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Mon, 14 Jan 2008 11:08:48 GMT]]></title><description><![CDATA[<p>Vorden schrieb:</p>
<blockquote>
<p>dumme frage:<br />
wäre nicht ein</p>
<pre><code class="language-cpp">vector&lt;node *&gt; children;
</code></pre>
<p>sinnvoller?<br />
Dann musste gar nix kopieren, außer dem Zeiger.</p>
</blockquote>
<p>Weiß nicht, ich glaube das ist nur teils/teils sinnvoll. Zum einen muss nichts kopiert werden, was ja schon einen theoretischen Geschwindigkeitsvorteil bietet, je größer der Baum, desto sinnvoller. Allerdings allokiert man damit jeweils winzige Speicherbereiche, und das auch noch oft, dazu muss man sich noch um die manuelle Speicherfreigabe kümmern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /><br />
Vielleicht wäre es am sinnvollsten mit eigenem Speichermanager und schlauen Zeigerchen. Da kommt dann die Sinnhaftigkeit aber auch auf den Schreibaufwand an, wie groß der Baum werden soll und so weiter <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Wie Simon2 sagen würde: <em>It depends</em> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436276</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 14 Jan 2008 11:08:48 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Mon, 14 Jan 2008 11:31:04 GMT]]></title><description><![CDATA[<p>Hingeklatscht und erfüllt mal wieder keine der tollen Designanforderungen, funzt aber. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Jetzt hat man zwar auch noch die Anzahl der nodes im struct, kann man aber ja auch trennen, wenn man denn möchte.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

using namespace std;

struct person{
    string name;
    int nodes;
    vector&lt;person&gt; children;
};
istream&amp; operator&gt;&gt;(istream &amp;in, person &amp;p){
    in &gt;&gt; p.name &gt;&gt; p.nodes;
    return in;
}

void readChildren(int d, istream &amp;in, person &amp;p){
    for(int k = 0; k &lt; d; k++){
	cout &lt;&lt; &quot;  &quot;;
    }
    cout &lt;&lt; p.name &lt;&lt; endl;
    for(int i = 0; i &lt; p.nodes; i++){
	person np;
	in &gt;&gt; np;
	p.children.push_back(np);
	readChildren(d+1, in, np);
    }
}

int main(int argc, char *argv[]){
    ifstream stream (&quot;test.txt&quot;);

    person root;
    stream &gt;&gt; root;
    readChildren(0, stream, root);

    stream.close();

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1436296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436296</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Mon, 14 Jan 2008 11:31:04 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Thu, 17 Jan 2008 01:45:53 GMT]]></title><description><![CDATA[<p>So da bin ich wieder. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Ich würde das Program in eine schickere und modernere Ebene hiefen. Damit meine kleinen Probleme vlt. für den einen oder anderen als Einstieg in die Erstellungen von Bäumen dienen. Nach diesem Muster wäre eine entsprechende Implementierung auf Binäre-baumstrukturen sicher möglich.</p>
<p>Neues Bildchen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p><a href="http://home.arcor.de/connyr23/tree3m.jpg" rel="nofollow">http://home.arcor.de/connyr23/tree3m.jpg</a></p>
<pre><code class="language-cpp">// &quot;tree&quot; (pointer to root node)
typedef struct nodeUBL* treeUBL;
// subtree list item
struct itemUBL {
treeUBL child;
itemUBL* succ;
};

// subtree list
struct listUBL {
unsigned int degree;
itemUBL* first;
itemUBL* last;
};
// tree node
struct nodeUBL {
string data;
listUBL children;
};
</code></pre>
<p>Das wären die Strukturen. Nun steht halbwegs die Rahmenfunktion die einen Zeiger auf den erzeugten Baum zurück gibt.</p>
<pre><code class="language-cpp">treeUBL* restore_tree(ifstream&amp; infile)
{
treeUBL proot = NULL;
listUBL forest; // Dummy-Unterbaumliste (= &quot;Wald&quot;)
initialise(&amp;forest); // Frage:

// den Baum als ersten Unterbaum im &quot;Wald&quot; rekonstruieren
// rst_t_dp(ifstream, &amp;forest, 1);
/*

Funktion folgt ... 

*/

// Ist überhaupt ein Baum entstanden (der Wald nicht leer)?
// Genau genommen müssten wir auch auf degree&gt;1 testen zwecks Fehlerbehandlung...
if (forest.degree &gt; 0)
{
proot = forest.first-&gt;child;
// Gib nun den Speicherplatz für die Liste wieder frei, in dem diese geleert wird.
// (Der extrahierte Baum sollte dabei natürlich nicht wieder aufgelöst werden!)
remove(forest, 1); // macht intern das delete für das entfernte itemUBL
}
return
</code></pre>
<p>Die grobe Rekonsruktionsfunktion(rst_t_dp(ifstream, &amp;forest, 1)) ist in arbeit. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich möchte gerne zum initialisieren die Funktion initialise() erstellen.</p>
<p>Zum einen soll Sie die Struktur forest initialisieren zum anderen auch die später auftauchenden Knoten:</p>
<pre><code class="language-cpp">treeUBL pnode = new nodeUBL; // Knoten erzeugen
initialise(pnode-&gt;children);
</code></pre>
<p>Wie sieht aber dann die Funktion aus und wie initialisiere ich nun meine 2 Strukturen? Wäre es da Sinnvoll einfach nur mit malloc den Speicher für zu reservieren? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Ich wünsch euch erstmal eine gute Nacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438087</guid><dc:creator><![CDATA[connyr23]]></dc:creator><pubDate>Thu, 17 Jan 2008 01:45:53 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Thu, 17 Jan 2008 09:16:55 GMT]]></title><description><![CDATA[<p>connyr23 schrieb:</p>
<blockquote>
<p>Wie sieht aber dann die Funktion aus und wie initialisiere ich nun meine 2 Strukturen? Wäre es da Sinnvoll einfach nur mit malloc den Speicher für zu reservieren? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Also malloc ist hier schonmal Mist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Der Nachteil an malloc ist, dass dann die Konstruktoren nicht aufgerufen werden, es wird nur Speicher reserviert. Wenn du Speicher für eine Struktur oder Klasse brauchst und darin befindet sich ein String oder irgendwas, was einen Konstruktor besitzt, dann kannst du das nur ordentlich benutzen, wenn du den Speicher mit &quot;new&quot; holst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich würde auf der bestehenden Einlese-Routine aufbauen. Das, was du ändern musst, ist, dass du beim Einlesen der Kinder keinen Eintrag im Knoten hinzufügen musst, sondern einen neuen Eintrag in der verketteten Liste erstellen musst. Wenn du dann alle Kinder eingelesen hast, setzt du die &quot;last&quot;-Variable auf das Ende der Liste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438191</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 17 Jan 2008 09:16:55 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Thu, 17 Jan 2008 13:22:06 GMT]]></title><description><![CDATA[<p>Wäre die initialsierug so ok ?</p>
<pre><code class="language-cpp">void initialise(listUBL* list)
{
list-&gt;First = list-&gt;Last = NULL;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1438364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438364</guid><dc:creator><![CDATA[connyr23]]></dc:creator><pubDate>Thu, 17 Jan 2008 13:22:06 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Thu, 17 Jan 2008 17:50:06 GMT]]></title><description><![CDATA[<p>Du kannst auch einfach Konstruktoren einbauen, die werden ausgeführt, wenn du das Objekt mit <code>listUBL l;</code> oder <code>listUBL* l = new listUBL();</code> erstellst.</p>
<pre><code class="language-cpp">struct listUBL
{
    unsigned int degree;
    itemUBL* first;
    itemUBL* last;

    // Entweder (1)
    listUBL() : degree(0), first(NULL), last(NULL)
    {
    }

    // Oder (2)
    listUBL()
    {
        degree = 0;
        first = NULL;
        last = NULL;
    }

    // Nur der Vollständigkeit halber, mit einer Tilde davor ist es ein Destruktor, der
    //   wird aufgerufen, wenn das Objekt zerstört wird, also bei 'delete obj;' oder
    //   wenn das Stack-Objekt aus dem Gültigkeitsbereich läuft.
    ~listUBL()
    {
    }
};
</code></pre>
<p>Bei (1) werden die (eingebauten) Konstruktoren von 'degree', 'first' und 'last' aufgerufen, bei zwei werden die Werte halt &quot;normal&quot; gesetzt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Konstruktoren dürfen auch (wie normale Funktionen) Parameter übernehmen, Destruktoren dagegen nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438571</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 17 Jan 2008 17:50:06 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Thu, 17 Jan 2008 18:24:01 GMT]]></title><description><![CDATA[<p>gut zu wissen, vermerk ich mir mal gleich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<pre><code class="language-cpp">struct node_info {
     T data;
     unsigned int depth;
}
node_info* rst_t_dp(ifstream&amp; infile, listUBL* subtrees, unsigned int depth)
{
     bool isDone = false;
     node_info* pinfo = NULL;

     while ( !isDone )
     {
        if ( pinfo == NULL &amp;&amp; (pinfo = read_node_info(infile)) == NULL )
     { //wenn infile erschöpft, sollte read_node NULL liefern

     isDone = true;
}
else if ( pinfo-&gt;depth &gt;= depth )
{

     bool down = pinfo-&gt;depth &gt; depth; // Merken der Tiefenrelation
     treeUBL pnode = new nodeUBL; // Knoten erzeugen
     pnode-&gt;data = pinfo-&gt;data; // Informationen eintragen

     initialise(pnode-&gt;children); // &quot; &quot;

     //hier sitz ich noch
     // add_last(subtrees, pnode); // Knoten zu den Unterbäumen hinzufügen

     delete pinfo; // Beseitige temporäre Info und ersetze sie ggf. aus Rekursion

     pinfo = NULL; // Wichtig für Unterscheidung im nächsten Schleifendurchlauf
     if (down)
     {
     // Entweder die Rekursion konsumiert den gesamten Strom, oder wir bekommen
     // eine Knoteninfo mit pinfo-&gt;depth &lt;= depth
     pinfo = rst_t_dp(ifstream, pnode-&gt;children, depth+1);
     }
}
else // Entweder pinfo == NULL oder pinfo-&gt;depth &lt; depth, also raus hier!
{
isDone = true;
}
}
return pinfo;
}
</code></pre>
<p>So, nun häng ich am verknüpfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<pre><code class="language-cpp">add_last(subtrees, pnode); // Knoten zu den Unterbäumen hinzufügen
</code></pre>
<p>An der scheitert es momentan. *CRY*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438584</guid><dc:creator><![CDATA[connyr23]]></dc:creator><pubDate>Thu, 17 Jan 2008 18:24:01 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Thu, 17 Jan 2008 18:47:39 GMT]]></title><description><![CDATA[<p>Irgendwie blick ich bei deinem Code nicht ganz durch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":-/"
      alt="😕"
    /> Kryptische Funktionsnamen wie &quot;rst_t_dp&quot; solltest du auch besser nicht verwenden, Code sollte definitiv <em>lesbar</em> sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Wie ist denn generell die Struktur von deinem Quelltext? Also welche Funktionen hast du, in welcher Reihenfolge oder wann werden sie aufgerufen usw?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438604</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 17 Jan 2008 18:47:39 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrwegbaum I , initialiseren und speichern on Thu, 17 Jan 2008 19:07:17 GMT]]></title><description><![CDATA[<p>restore_tree_depth <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Ich poste nachher mal meine Baustelle. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438620</guid><dc:creator><![CDATA[connyr23]]></dc:creator><pubDate>Thu, 17 Jan 2008 19:07:17 GMT</pubDate></item></channel></rss>