<?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[Brauche Hilfe beim Binärbaum]]></title><description><![CDATA[<p>Hallo,</p>
<p>hab mir die ganze Theorie reingezogen und auch einigermaßen verstanden.</p>
<p>Jetzt wollt ich das in mein Programm einbauen. Die Grundstruktur hab ich schon:</p>
<pre><code>struct Knoten
{
	Knoten* l;		// linker Kindknoten
	Knoten* r;		// rechter Kindknoten
	string inhalt;		

};
</code></pre>
<p>Der Baum soll kein AVL oder sonstiger Sortierbaum werden. Es wird einfach nur ein unbalancierter Baum der als Knoteninhalte Strings hat.<br />
Die Inhalte der Knoten also die Strings liegen vor also ich weis wie der Baum am Ende auf dem Papier aussehen soll und was im welchen Knoten steht.<br />
Bloß versteh ich das nicht so ganz mit den Pointern wie ich jetzt den Baum &quot;wachsen&quot; lasse, wie ich die Wurzel erstelle und wie das dann im Speicher aussieht, etc.? Kann mir das mal jemand näher bringen, also wie ich jetzt die Wurzel erstelle und dann den Baum durch Einfügen der strings wachsen lasse!?<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Vielen Dank für euer Bemühen! <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/192952/brauche-hilfe-beim-binärbaum</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 03:26:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192952.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Sep 2007 11:24:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 20 Sep 2007 11:24:22 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>hab mir die ganze Theorie reingezogen und auch einigermaßen verstanden.</p>
<p>Jetzt wollt ich das in mein Programm einbauen. Die Grundstruktur hab ich schon:</p>
<pre><code>struct Knoten
{
	Knoten* l;		// linker Kindknoten
	Knoten* r;		// rechter Kindknoten
	string inhalt;		

};
</code></pre>
<p>Der Baum soll kein AVL oder sonstiger Sortierbaum werden. Es wird einfach nur ein unbalancierter Baum der als Knoteninhalte Strings hat.<br />
Die Inhalte der Knoten also die Strings liegen vor also ich weis wie der Baum am Ende auf dem Papier aussehen soll und was im welchen Knoten steht.<br />
Bloß versteh ich das nicht so ganz mit den Pointern wie ich jetzt den Baum &quot;wachsen&quot; lasse, wie ich die Wurzel erstelle und wie das dann im Speicher aussieht, etc.? Kann mir das mal jemand näher bringen, also wie ich jetzt die Wurzel erstelle und dann den Baum durch Einfügen der strings wachsen lasse!?<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Vielen Dank für euer Bemühen! <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/1369162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369162</guid><dc:creator><![CDATA[RunSeb]]></dc:creator><pubDate>Thu, 20 Sep 2007 11:24:22 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 20 Sep 2007 11:35:06 GMT]]></title><description><![CDATA[<p>Zunächst mußt du dir klar machen, wo und wie die einzelnen Knoten zu einem Baum zusammengebaut werden sollen. Dann erzeugst du für jeden Eintrag einen Knoten, trägst in 'inhalt' den entsprechenden String ein und hängst die einzelnen Knoten über die l- und r-Pointer entsprechend deinen Vorstellungen zusammen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369184</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Sep 2007 11:35:06 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 20 Sep 2007 11:45:01 GMT]]></title><description><![CDATA[<p>Du merkst Dir Dein Wurzelelement (root).<br />
Die l und r Elemente sollten initialisiert werden, entweder mit nem Objekt oder<br />
mit NULL.</p>
<pre><code class="language-cpp">Knoten* root = new Knoten();
root-&gt;inhalt = &quot;root&quot;;
root-&gt;l = NULL;
root-&gt;r = NULL;
</code></pre>
<p>Neuen Knoten ganz links einfügen</p>
<pre><code class="language-cpp">Knoten* tmp = root;
while(tmp)
{
    tmp = tmp-&gt;l;
}

// ganz links angekommen
tmp = new Knoten();
tmp-&gt;l = NULL;
tmp-&gt;r = NULL;
tmp-&gt;inhalt = &quot;ganz links&quot;;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1369198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369198</guid><dc:creator><![CDATA[Förster]]></dc:creator><pubDate>Thu, 20 Sep 2007 11:45:01 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 20 Sep 2007 12:10:34 GMT]]></title><description><![CDATA[<p>Jo, das erklärt schon einiges, danke!</p>
<p>Trotzdem werfen sich mir da gleich neue FRagen auf:<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Verstehe ich das richtig das jeder Knoten dann zusätzlich zu seinem Inhalt und den Zeigern noch zusätlich einen Namen hat wie &quot;root&quot; und &quot;tmp&quot;?<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Kann ich dem ganzen Baum dann einen Namen geben, weil ich mehrere Bäume erstellen will bzw. am Ende einen ganzen Wald habe und bestimmte Bäume dann wiederfinden muss.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Ob und wie muss ich mich um Speicherverwaltung kümmern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369234</guid><dc:creator><![CDATA[RunSeb]]></dc:creator><pubDate>Thu, 20 Sep 2007 12:10:34 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 20 Sep 2007 12:20:22 GMT]]></title><description><![CDATA[<p>1. Er kann einen &quot;Namen&quot; haben, muß aber nicht unbedingt - die Bezeichnung &quot;tmp&quot; ist z.B. nur eine Hilfsvariable, um sich durch den Baum durchhangeln zu können.</p>
<p>2. Ja, du kannst auch mehrere Bäume haben (und die sogar miteinander verschmelzen etc., wenn du willst).</p>
<p>3. Klar brauchst du Speicherverwaltung - wenn du einen Knoten aus dem Baum löschst, muß er (und eventuell alle Unterknoten) per delete entsorgt werden - und spätestens am Programmende fliegt der komplette Baum auf den Müll.<br />
(da bietet es sich übrigens an, einen Destruktor für die Baumknoten zu schreiben, der das übernimmt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369242</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Sep 2007 12:20:22 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 20 Sep 2007 13:35:22 GMT]]></title><description><![CDATA[<p>Das mit dem Einfügen klappt noch nicht!<br />
Ich meine schließlich will ich ja nicht immer nur ganz links oder ganz rechts einfügen sondern auch in der Mitte des Baumes!?</p>
<p>Das wird so ne Art boolscher Termbaum wie z.B.:</p>
<p>aus so ner Art Postfixschreibweise die mir vorliegt: OR AND NOT var1 var2 AND var2 NOT var1</p>
<p>soll genau dieser Baum entstehen:<br />
OR<br />
/ \<br />
AND AND<br />
/ \ / \<br />
NOT var1 var2 NOT<br />
/ /<br />
var2 var1</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369324</guid><dc:creator><![CDATA[RunSeb]]></dc:creator><pubDate>Thu, 20 Sep 2007 13:35:22 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 20 Sep 2007 13:41:26 GMT]]></title><description><![CDATA[<p>Wie gesagt: - da mußt du schon wissen, wo die einzelnen Teile untergebracht werden sollen. Bei diesen Vorgaben würde ich die Eingabe von hinten abarbeiten und den Syntaxbaum stückweise über einen Stack zusammenstellen</p>
<ul>
<li>Variable: Balttknoten erzeugen und auf Stack legen</li>
<li>NOT: obersten Knoten nehmen, als linken Sohn einen neuen Knotens einfügen und letzteren auf den Stack legen</li>
<li>AND/OR: oberste zwei Knoten nehmen, als Kinder eines neuen Knotens einfügen und letzteren auf den Stack legen</li>
</ul>
<p>(am Ende liegt dann hoffentlich genau ein Knoten auf dem Stack, den du als Wurzel nehmen kannst)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369331</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Sep 2007 13:41:26 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 20 Sep 2007 14:28:38 GMT]]></title><description><![CDATA[<p>Ehm ist bei einem &quot;Binär&quot;baum nicht normalerweise der Wert 1 oder 0? Ansonsten solltest du als Type nen Template nehmen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369410</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 20 Sep 2007 14:28:38 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 20 Sep 2007 14:31:27 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>Ehm ist bei einem &quot;Binär&quot;baum nicht normalerweise der Wert 1 oder 0?</p>
</blockquote>
<p>Nein, das &quot;binär&quot; in <a href="http://de.wikipedia.org/wiki/Bin%C3%A4rbaum" rel="nofollow">Binärbaum</a> bezieht sich nicht auf die Werte der Knoten, sondern auf die Anzahl der jeweiligen Kind-Elemente.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369415</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Sep 2007 14:31:27 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 20 Sep 2007 14:32:09 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>Ehm ist bei einem &quot;Binär&quot;baum nicht normalerweise der Wert 1 oder 0?</p>
</blockquote>
<p>Binär heißt hier nur, dass jeder Knoten höchstens zwei Kindknoten haben kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369416</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Thu, 20 Sep 2007 14:32:09 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 20 Sep 2007 19:41:57 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>Ehm ist bei einem &quot;Binär&quot;baum nicht normalerweise der Wert 1 oder 0?</p>
</blockquote>
<p>LOOOOOOOOOOOOOOOOOOOOOOOOOL</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369682</guid><dc:creator><![CDATA[aber echt ey]]></dc:creator><pubDate>Thu, 20 Sep 2007 19:41:57 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 20 Sep 2007 20:35:45 GMT]]></title><description><![CDATA[<p>Hmm hab mir auch mal ne kleine Implementierung ausgedacht ... ist aber nicht ausgereift:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class binary_tree
{
public:
	struct node
	{
		node*	left;
		node*	right;
		node*	parent;
		T		data;
		node(node* parent, T const&amp; data) : left(NULL), right(NULL), parent(NULL), data(data) {}
	public:
		void	erase()
		{
			if (parent != NULL)
			{
				if (parent-&gt;left == this)
					parent-&gt;left = NULL;
				else
					parent-&gt;right = NULL;
			}
			node* tmp_left = left;
			node* tmp_right = right;
			delete this;
			if (tmp_left != NULL)
				tmp_left-&gt;erase();
			if (tmp_right != NULL)
				tmp_right-&gt;erase();
		}
		bool in(const node* ptr) const
		{
			if (left == NULL &amp;&amp; right == NULL) return false;
			if (left == ptr || right == ptr) return true;
			return (left != NULL &amp;&amp; left-&gt;in(ptr)) || (right != NULL &amp;&amp; right-&gt;in(ptr));
		}
	};
private:
	node * m_root, *m_curent;
	std::size_t m_size;

public:
	binary_tree() : m_root(NULL), m_size(0), m_curent(NULL) {}
	~binary_tree()
	{
		erase(m_root);
	}

public:
	bool empty() const { return m_size == 0; }
	node* push_back(T const&amp; data, bool left)
	{
		if (empty() == true)
		{
			m_root = new node(NULL, data);
			m_curent = m_root;
		}
		else if (left == true)
		{
			m_curent-&gt;left = new node(m_curent, data);
			m_curent = m_curent-&gt;left;
		}
		else
		{
			m_curent-&gt;right = new node(m_curent, data);
			m_curent = m_curent-&gt;right;
		}	
		++m_size;
		return m_curent;
	}

	bool in(const node* node) const	{	return (m_root != node ? m_root-&gt;in(node) : true);	}

	void erase(node* begin = NULL)
	{
		if (begin == NULL)
		{
			if (m_root != NULL)
				m_root-&gt;erase();
			m_root = NULL;
		}
		else if (in(begin) == true)
			begin-&gt;erase();
		else
			throw std::out_of_range(&quot;node not in tree&quot;);
	}

	void insert(node* begin, T const&amp; data, bool left)
	{
		if (left == true &amp;&amp; begin-&gt;left != NULL || left == false &amp;&amp; begin-&gt;right != NULL)
			throw std::invalid_argument(&quot;node already set&quot;);

		node* tmp = (left == true ? begin-&gt;left : begin-&gt;right);
		tmp = new node(begin, data);
		++m_size;
	}
};
</code></pre>
<pre><code class="language-cpp">int main()
{
	binary_tree&lt;bool&gt; tree;
	binary_tree&lt;bool&gt;::node* tmp = tree.push_back(false, true);
	tree.push_back(true, false);
	tree.insert(tmp, false, true);
	//	  false
	//		*
	//false	   true
	//	*		*
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1369719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369719</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 20 Sep 2007 20:35:45 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 20 Sep 2007 22:16:58 GMT]]></title><description><![CDATA[<p>(D)Evil, hast du eigentlich viel Zeit? <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/1369768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369768</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 20 Sep 2007 22:16:58 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Fri, 21 Sep 2007 16:30:46 GMT]]></title><description><![CDATA[<p>Nein. Eigentlich nicht ... Nur brauch ich evt. nicht so lange für so nen kurzen Codesnippet <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="😉"
    /> 4-6min denke ich mal hab ich höchstens daf+r gebraucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1370250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370250</guid><dc:creator><![CDATA[(D)Evil_not at home]]></dc:creator><pubDate>Fri, 21 Sep 2007 16:30:46 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Tue, 25 Sep 2007 11:36:11 GMT]]></title><description><![CDATA[<p>MMH, ok, der Code ist super. Blos brauche ich da wirklich nur den Aufbau von so einem Baum, also De-/Konstruktor sowie Knoten wieder löschen und/oder kopieren und was du da noch schönes alles eingebaut hast ist überflüssig. Trotzdem danke für die Mühe. <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 />
Leider versteh ich da als Hobbyprogrammierer auch nur die Hälfte.</p>
<p>Mich würde bei dem Code:</p>
<p>Förster schrieb:</p>
<blockquote>
<p>Du merkst Dir Dein Wurzelelement (root).<br />
Die l und r Elemente sollten initialisiert werden, entweder mit nem Objekt oder<br />
mit NULL.</p>
<pre><code class="language-cpp">Knoten* root = new Knoten();
root-&gt;inhalt = &quot;root&quot;;
root-&gt;l = NULL;
root-&gt;r = NULL;
</code></pre>
<p>Neuen Knoten ganz links einfügen</p>
<pre><code class="language-cpp">Knoten* tmp = root;
while(tmp)
{
    tmp = tmp-&gt;l;
}

// ganz links angekommen
tmp = new Knoten();
tmp-&gt;l = NULL;
tmp-&gt;r = NULL;
tmp-&gt;inhalt = &quot;ganz links&quot;;
</code></pre>
</blockquote>
<p>interessieren was du mit &quot;Wurzelelement merken&quot; meinst!? Das mit dem tmp verstehe ich auch noch nicht. Könnte mir das mal jemand ausführlich näher bringen. Wie kann ich mir die Stelle merken wo ich grad einen Knoten erstellt habe - ( ist das das tmp? ) - wie kann ich von dieser Stelle aus dann wieder rechts oder links einen Knoten einfügen? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1372307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372307</guid><dc:creator><![CDATA[RunSeb]]></dc:creator><pubDate>Tue, 25 Sep 2007 11:36:11 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Tue, 25 Sep 2007 12:01:21 GMT]]></title><description><![CDATA[<p>Bei einem Baum musst Du immer Zugriff auf die Wurzel haben.<br />
Also brauchst Du eine Variable die lange genug gültig ist und auf das Wurzelelement verweist (in diesem Beispiel die Variable root).<br />
So kannst Du immer von oben nach unten (egal wohin genau) iterieren und am ende den Baum wieder löschen (Speicher freigeben).</p>
<p>tmp ist ein (temporärer) Zeiger auf ein Element (Knoten).<br />
Du kannst ihn natürlich weiter verwenden oder woanders ablegen.</p>
<p>Bei dem Code ist tmp am Ende das neue Element, welches ganz links eingefügt wurde. Es ist aber nur ein Zeiger. Du kannst genauso einen weiteren Zeiger auf dieses Element verweisen lassen.<br />
Falls Du tmp speicherst, dann kannst Du immer noch das Element ganz links erreichen (durch root).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372332</guid><dc:creator><![CDATA[Förster]]></dc:creator><pubDate>Tue, 25 Sep 2007 12:01:21 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Tue, 25 Sep 2007 12:11:04 GMT]]></title><description><![CDATA[<p>Ok, schön, da hab ich jetzt verstanden was es mit root und tmp auf sich hat!<br />
Jetzt hab ich aber folgendes Problem:<br />
Mal angenommen ich füge ganz links einen Knoten ein. Wie kann ich dann von dem ganz linken Knoten aus wieder rechts und links einen Knoten einfügen ohne zur Wurzel zurückzukehren. Also irgendwie müsste ich dann an dem Knoten bleiben bzw. mir den Knoten merken und von dort aus weiter... oder hab ich es aufgrund einer Denkblockade immer noch nicht gepeilt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372341</guid><dc:creator><![CDATA[RunSeb]]></dc:creator><pubDate>Tue, 25 Sep 2007 12:11:04 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Tue, 25 Sep 2007 12:13:45 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Knoten* root = new Knoten();
root-&gt;inhalt = &quot;root&quot;;
root-&gt;l = NULL;
root-&gt;r = NULL;
</code></pre>
<p>Baum sieht so aus (nur Wurzel, keine weiteren Knoten):</p>
<pre><code>*
/   \
</code></pre>
<pre><code class="language-cpp">Knoten* tmp = root; // tmp zeigt auf root
while(tmp-&gt;l) // solange tmp ein l-Element besitzt
{
    tmp = tmp-&gt;l;  // gehe nach links
}
</code></pre>
<p>Wenn Du jetzt bei tmp-&gt;l ein neues Element einfügst, dann ist es so als würdest Du bei root-&gt;l einfügen, weil root und tmp auf das gleiche zeigen.</p>
<p>Baum sieht nun so aus:</p>
<pre><code>*
   /   \
  *
/  \
</code></pre>
<p>Wenn Du nun an tmp-&gt;l immer einen neuen Knoten anhängst, dann wächst der Baum nach links.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372343</guid><dc:creator><![CDATA[Förster]]></dc:creator><pubDate>Tue, 25 Sep 2007 12:13:45 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Tue, 25 Sep 2007 12:23:32 GMT]]></title><description><![CDATA[<p>OKAY, das ist gebongt! Und wenn ich dann meinen Baum nach rechts aufbauen möchte und links fertig bin, gehe ich wieder von root aus!! Mal sehn ob ich das jetzt hinbekomme!<br />
Ich bin mal wieder schwer von Begriff. Danke für die umfangreiche Erklärung! <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/1372355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372355</guid><dc:creator><![CDATA[RunSeb]]></dc:creator><pubDate>Tue, 25 Sep 2007 12:23:32 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Tue, 25 Sep 2007 18:01:36 GMT]]></title><description><![CDATA[<p>Auch auf die Gefahr hin das jetzt welche mein Urteilungsvermögen niedriger einschätzen:</p>
<blockquote>
<p>Leider versteh ich da als Hobbyprogrammierer auch nur die Hälfte.</p>
</blockquote>
<p>Ich bin noch zu jung um Programmierer (als Beruf) zu sein ... von daher ist das kein Argument <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="😉"
    /> Ich bin jünger als sagen wir mal 80% der als halbwegs &quot;guru&quot;-mäßigen ... ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372579</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 25 Sep 2007 18:01:36 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Wed, 26 Sep 2007 17:09:30 GMT]]></title><description><![CDATA[<p>also wenn du so gut bist wäre es supi wenn du mir deinen Code von oben mal bisschen mit aussagekräftigen Kommentaren füllst!<br />
<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="👍"
    /></p>
<p>außerdem bringt er eine Fehlermeldung in Zeile 39: size_t ist kein Element von std<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373296</guid><dc:creator><![CDATA[RunSeb]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:09:30 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Wed, 26 Sep 2007 17:31:20 GMT]]></title><description><![CDATA[<p>Was hast du für einen Compiler? std::size_t ist auf jeden Fall korrekt <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">template &lt;typename T&gt; // Wir wollen das nicht für einen Datentyp spezifizieren 
class binary_tree
{
public:
	struct node
	{
		node*	left;
		node*	right;
		node*	parent; // intern benötigt(bzw. zu vereinfachung)
		T		data;
		node(node* parent, T const&amp; data) : left(NULL), right(NULL), parent(NULL), data(data) {}
	public:
		void	erase()
		{
			if (parent != NULL) // wenn es nicht die Wurzel ist
			{
				// Wir müssen dem Übergeordneten Knoten mitteilen, dass wir gleich nicht mehr existieren!
				if (parent-&gt;left == this) // Bin ich der linke oder der rechte Ast?!
					parent-&gt;left = NULL;
				else
					parent-&gt;right = NULL;
			}
			node* tmp_left = left;
			node* tmp_right = right;
			delete this; // uns selbst löschen

			// Wenn man einen Ast abschneidet gehen auch seine Blätter und &quot;Unter&quot;-Äste verloren ...
			if (tmp_left != NULL) 
				tmp_left-&gt;erase();
			if (tmp_right != NULL)
				tmp_right-&gt;erase();
		}
		bool in(const node* ptr) const
		{
			if (left == NULL &amp;&amp; right == NULL) return false; // Wenn keine Untergeordneten Äste da sind, können sie auch nicht das node sein ...
			if (left == ptr || right == ptr) return true; // wenn eines der beiden es ist, dann das zurückgeben
			return (left != NULL &amp;&amp; left-&gt;in(ptr)) || (right != NULL &amp;&amp; right-&gt;in(ptr)); // sonnst kinder suchen lassen ...
		}
	};
private:
	node * m_root, *m_curent; // curent ist nur, damit wir wissen wo push_back weiter machen soll ...
	std::size_t m_size;

public:
	binary_tree() : m_root(NULL), m_size(0), m_curent(NULL) {}
	~binary_tree()
	{
		erase(m_root);
	}

public:
	bool empty() const { return m_size == 0; }
	node* push_back(T const&amp; data, bool left)
	{
		if (empty() == true) // wenn noch nichts drin ist, haben wir eine Wurzel!
		{
			m_root = new node(NULL, data);
			m_curent = m_root;
		}
		else if (left == true) // Linker oder rechtes Blatt?
		{
			m_curent-&gt;left = new node(m_curent, data);
			m_curent = m_curent-&gt;left;
		}
		else
		{
			m_curent-&gt;right = new node(m_curent, data);
			m_curent = m_curent-&gt;right;
		}	
		++m_size;
		return m_curent;
	}

	// Ist die Wurzel es selbst? Sonnst die Kinder weiter machen lassen(siehe oben!)
	bool in(const node* node) const	{	return (m_root != node ? m_root-&gt;in(node) : true);	}

	void erase(node* begin = NULL)
	{
		if (begin == NULL) // wenn begin == NULL ist, den ganzen Baum weg.
		{
			if (m_root != NULL)
				m_root-&gt;erase();
			m_root = NULL;
		}
		else if (in(begin) == true) // ist der Knoten überhaupt teil unseres Baumes? Wenn ja, dann löschen!
			begin-&gt;erase();
		else
			throw std::out_of_range(&quot;node not in tree&quot;); // Sonnst Warnung rauswerfen
	}

	void insert(node* begin, T const&amp; data, bool left)
	{
		if (left == true &amp;&amp; begin-&gt;left != NULL || left == false &amp;&amp; begin-&gt;right != NULL) 
			// wenn der Knoten schon ein solches Element hat, gibt es ne ausnahme ;)
			throw std::invalid_argument(&quot;node already set&quot;);

		node* tmp = (left == true ? begin-&gt;left : begin-&gt;right); // linker - rechter Ast?
		tmp = new node(begin, data); // neuen Knoten anlegen
		++m_size;
		// Hier kann man, wenn man will, m_curent auf den neu eingefügten Knoten setzen. (evtl. Parameter?)
	}
};
</code></pre>
<p>... ist eigentlich relativ selbsterklärend ... hab jetzt überall mal nen bissel was dran geschrieben ... wenn du noch Fragen hast, dann sag bitte die genaue Stelle im Code ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373310</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:31:20 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 27 Sep 2007 07:51:44 GMT]]></title><description><![CDATA[<p>Vielen Dank!!!</p>
<p>Wie gesagt, mein Compiler meckert auf Zeile 42, dass size_t kein Element von std ist! Was soll ich da für einen Typ nutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373618</guid><dc:creator><![CDATA[RunSeb]]></dc:creator><pubDate>Thu, 27 Sep 2007 07:51:44 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 27 Sep 2007 07:56:33 GMT]]></title><description><![CDATA[<p>RunSeb schrieb:</p>
<blockquote>
<p>Wie gesagt, mein Compiler meckert auf Zeile 42, dass size_t kein Element von std ist! Was soll ich da für einen Typ nutzen?</p>
</blockquote>
<p>#include &lt;cstddef&gt;<br />
oder einer der vielen anderen Header, die size_t definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373624</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 27 Sep 2007 07:56:33 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 27 Sep 2007 08:27:20 GMT]]></title><description><![CDATA[<p>Mal so in den Raum geworfen: Macht es überhaupt Sinn, einen nicht balanzierten Baum zu verwenden? Meiner Meinung nach verkommen die sowieso zu einer einfachen verketteten Liste - und dann kann man auch direkt eine solche verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373645</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 27 Sep 2007 08:27:20 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim Binärbaum on Thu, 27 Sep 2007 08:38:11 GMT]]></title><description><![CDATA[<p>Nicht jeder Baum wird als Suchbaum verwendet (bei Suchbäumen sind die balancierten Varianten tatsächlich vorteilhaft) <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="😉"
    /> Und nach dem, was ich bisher mitbekommen habe, läuft runSeb's Ansatz eher auf einen Syntaxbaum hinaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373653</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 27 Sep 2007 08:38:11 GMT</pubDate></item></channel></rss>