<?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[Löschen im binären Suchbaum]]></title><description><![CDATA[<p>Guten Morgen,<br />
ich habe folgendes Problem und hoffe, dass ihr mir dabei helfen könnt <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 muss einen binären Suchbaum erstellen, indem man diverse Funktionen nutzen kann. Abgesehen vom Löschen des kompletten Baumes oder einzlener Knoten ist mir dies auch gelungen. Ich habe viele verschiedene Funktionen zum Löschen ausprobiert und im Wesentlichen trat immer eins von 2 Problem auf: 1. Das Programm stürzt ab oder 2. es wird nicht gelöscht.</p>
<p>Für das Löschen des kompletten Baumes hatte ich folgenden relativ intuitiven Ansatz:</p>
<pre><code>void DeleteTree(Node *root){
	if(root==0){
		return;
	}
	DeleteTree(root-&gt;left);
	DeleteTree(root-&gt;right);
	delete root;
}
</code></pre>
<p>und auch einen etwas komplizierteren:</p>
<pre><code>void DeleteTree(Node *root){
		if((root-&gt;left == 0) &amp;&amp; (root-&gt;right==0)){ //hat der knoten keine Kinder, lösche ihn
			delete root;

		}
		else if((root-&gt;right!=0) &amp;&amp; (root-&gt; left ==0)){ // hat er nur rechts ein Kind
			Node* cache=root;
			root=root-&gt;left;
			delete cache;  //lösche ihn und setze dieses Kind an seine Stelle
			DeleteTree(root);
		}
		else if(root-&gt;right!=0 &amp;&amp; root-&gt;left ==0){ //hat er nur links ein Kind
					Node* cache=root;
					root=root-&gt;left;
					delete cache; //lösche ihn und setze Kind an seine Stelle
					DeleteTree(root);
				}
		else if(root-&gt; right !=0 &amp;&amp; root-&gt;left !=0){
			Node* cache;
			if (root-&gt; left -&gt; right != 0){
			cache=root-&gt;left-&gt;right;
				while (cache-&gt;right !=0){
					cache=cache-&gt;right;
				}
				cache-&gt;right=root-&gt;right;
			}else{
				root-&gt;left-&gt;right= root-&gt;right;
			}

			cache=root;
			root=root-&gt;left;
			delete cache;
			DeleteTree(root);
		}

}
</code></pre>
<p>Vor allem bei dem intuiviem Ansatz hätte ich erwartet, dass er funktioniert. Könnt ihr mir vielleicht sagen, wo mein Fehler liegt?</p>
<p>Gruß Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/329817/löschen-im-binären-suchbaum</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 20:55:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/329817.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Dec 2014 07:44:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Löschen im binären Suchbaum on Tue, 09 Dec 2014 07:44:51 GMT]]></title><description><![CDATA[<p>Guten Morgen,<br />
ich habe folgendes Problem und hoffe, dass ihr mir dabei helfen könnt <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 muss einen binären Suchbaum erstellen, indem man diverse Funktionen nutzen kann. Abgesehen vom Löschen des kompletten Baumes oder einzlener Knoten ist mir dies auch gelungen. Ich habe viele verschiedene Funktionen zum Löschen ausprobiert und im Wesentlichen trat immer eins von 2 Problem auf: 1. Das Programm stürzt ab oder 2. es wird nicht gelöscht.</p>
<p>Für das Löschen des kompletten Baumes hatte ich folgenden relativ intuitiven Ansatz:</p>
<pre><code>void DeleteTree(Node *root){
	if(root==0){
		return;
	}
	DeleteTree(root-&gt;left);
	DeleteTree(root-&gt;right);
	delete root;
}
</code></pre>
<p>und auch einen etwas komplizierteren:</p>
<pre><code>void DeleteTree(Node *root){
		if((root-&gt;left == 0) &amp;&amp; (root-&gt;right==0)){ //hat der knoten keine Kinder, lösche ihn
			delete root;

		}
		else if((root-&gt;right!=0) &amp;&amp; (root-&gt; left ==0)){ // hat er nur rechts ein Kind
			Node* cache=root;
			root=root-&gt;left;
			delete cache;  //lösche ihn und setze dieses Kind an seine Stelle
			DeleteTree(root);
		}
		else if(root-&gt;right!=0 &amp;&amp; root-&gt;left ==0){ //hat er nur links ein Kind
					Node* cache=root;
					root=root-&gt;left;
					delete cache; //lösche ihn und setze Kind an seine Stelle
					DeleteTree(root);
				}
		else if(root-&gt; right !=0 &amp;&amp; root-&gt;left !=0){
			Node* cache;
			if (root-&gt; left -&gt; right != 0){
			cache=root-&gt;left-&gt;right;
				while (cache-&gt;right !=0){
					cache=cache-&gt;right;
				}
				cache-&gt;right=root-&gt;right;
			}else{
				root-&gt;left-&gt;right= root-&gt;right;
			}

			cache=root;
			root=root-&gt;left;
			delete cache;
			DeleteTree(root);
		}

}
</code></pre>
<p>Vor allem bei dem intuiviem Ansatz hätte ich erwartet, dass er funktioniert. Könnt ihr mir vielleicht sagen, wo mein Fehler liegt?</p>
<p>Gruß Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431923</guid><dc:creator><![CDATA[Stephan_]]></dc:creator><pubDate>Tue, 09 Dec 2014 07:44:51 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen im binären Suchbaum on Tue, 09 Dec 2014 08:01:15 GMT]]></title><description><![CDATA[<p>Woher weißt du, dass nichts gelöscht wurde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431924</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 09 Dec 2014 08:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen im binären Suchbaum on Tue, 09 Dec 2014 08:12:24 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich musste unter anderem eine Funktion schreiben, die den Baum sortiert ausgibt. Und wenn das Programm nicht abgestürzt ist, war die Ausgabe vor und nach dem Löschen identisch.</p>
<p>Gruß Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431928</guid><dc:creator><![CDATA[Stephan_]]></dc:creator><pubDate>Tue, 09 Dec 2014 08:12:24 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen im binären Suchbaum on Tue, 09 Dec 2014 08:22:19 GMT]]></title><description><![CDATA[<p>Die Bits sind nach dem Löschen ja auch noch alle vorhanden. Wenn du sie illegalerweise betrachtest, kann sich das Programm verhalten, als wäre noch alles da. Es kann aber auch abstürzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431931</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 09 Dec 2014 08:22:19 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen im binären Suchbaum on Tue, 09 Dec 2014 08:29:23 GMT]]></title><description><![CDATA[<p>Das heißt also, dass die Funktion so richtig ist und der Fehler nur durch den Versuch auftritt, das ganze nochmal auszugeben obwohl eigentlich nichts mehr da ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431934</guid><dc:creator><![CDATA[Stephan_]]></dc:creator><pubDate>Tue, 09 Dec 2014 08:29:23 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen im binären Suchbaum on Tue, 09 Dec 2014 08:51:47 GMT]]></title><description><![CDATA[<p>Schreib doch einfach mal einen Destruktor für Node und gib da irgendwas aus. Wenn da alle Items/Daten beim Löschen was ausgeben machst du bei der Ausgabe deines Bauems was (gehörig) falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431938</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 09 Dec 2014 08:51:47 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen im binären Suchbaum on Tue, 09 Dec 2014 09:40:45 GMT]]></title><description><![CDATA[<p>Ich habe das mit der Ausgabe getestet. Es wurden alle im Baum befindlichen Elemente ausgegeben. Also hat mein erster Code zumindest mal alle Elemente durchlaufen.</p>
<p>Anschließend habe ich dem nun &quot;leeren&quot; Baum neue Werte hinzugefügt und diesen dann ausgeben lassen. Die neue Ausgabe bestand nur aus den neuen Werten, also scheint delete zu funktionieren und der Fehler kam tatsächlich durch den Versuch einen quasi nicht existierenden Baum ausgeben zu wollen.</p>
<p>Nun gilt es nurnoch die Funktion RemoveNode zum Laufen zu bringen. Ich werde dies nun nochmal selbst versuchen und mich dann ggf. nochmals melden, falls ich es nicht hinbekomme.</p>
<p>Ich danke euch beiden vielmals! <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>Gruß Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431944</guid><dc:creator><![CDATA[Stephan_]]></dc:creator><pubDate>Tue, 09 Dec 2014 09:40:45 GMT</pubDate></item></channel></rss>