<?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[In Rekursion Wert &amp;quot;mitnemen&amp;quot;?]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Ich soll eine Funktion schreiben die mir rekursiv einen Wert aus einem Binärbaum löscht (so lautet die korrekte Aufgabenstellung!).</p>
<p>Ich hab nun diese komplette Funktion in mehrere Teilschritte zerlegt:</p>
<p>1. Zu löschenden Wert im Baum suchen. Dazu Vorgänger merken.<br />
2. Element aus dem Baum entnehmen<br />
3. Suchbaum-Eigenschaft wieder herstellen<br />
4. Element endgültig löschen</p>
<p>Ich hab hier nun diese Funktion:</p>
<pre><code class="language-cpp">void searchtree1::DeleteValue(object o)
{
	//Wert im Baum suchen
	if(root-&gt;val == o)
	{
		//Wert aus dem Baum entnehmen
	}
	else if(o &lt; root-&gt;val)
	{
		root = root-&gt;left;
		object tempVal = root-&gt;val;

		DeleteValue(o);
	}
	else
	{
		root = root-&gt;right;
	}
}
</code></pre>
<p>Ich hab hier nun das Problem, dass ich nicht weiß, wie ich innerhalb der Rekursion den Wert des Vorgänger &quot;mitnehme&quot;, damit ich nach dem Löschen, nicht das Probleme bekomme, dass der Zeiger des Vorgänger ins leere zeigt, da ja das nachfolgende Element gelöscht wurde! &quot;tempVal&quot; soll übrigens die Variable sein, die &quot;mitgenommen&quot; werden soll!</p>
<p>Könnt ihr mir helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/303464/in-rekursion-wert-quot-mitnemen-quot</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 11:11:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303464.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 May 2012 18:46:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to In Rekursion Wert &amp;quot;mitnemen&amp;quot;? on Mon, 14 May 2012 18:47:34 GMT]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Ich soll eine Funktion schreiben die mir rekursiv einen Wert aus einem Binärbaum löscht (so lautet die korrekte Aufgabenstellung!).</p>
<p>Ich hab nun diese komplette Funktion in mehrere Teilschritte zerlegt:</p>
<p>1. Zu löschenden Wert im Baum suchen. Dazu Vorgänger merken.<br />
2. Element aus dem Baum entnehmen<br />
3. Suchbaum-Eigenschaft wieder herstellen<br />
4. Element endgültig löschen</p>
<p>Ich hab hier nun diese Funktion:</p>
<pre><code class="language-cpp">void searchtree1::DeleteValue(object o)
{
	//Wert im Baum suchen
	if(root-&gt;val == o)
	{
		//Wert aus dem Baum entnehmen
	}
	else if(o &lt; root-&gt;val)
	{
		root = root-&gt;left;
		object tempVal = root-&gt;val;

		DeleteValue(o);
	}
	else
	{
		root = root-&gt;right;
	}
}
</code></pre>
<p>Ich hab hier nun das Problem, dass ich nicht weiß, wie ich innerhalb der Rekursion den Wert des Vorgänger &quot;mitnehme&quot;, damit ich nach dem Löschen, nicht das Probleme bekomme, dass der Zeiger des Vorgänger ins leere zeigt, da ja das nachfolgende Element gelöscht wurde! &quot;tempVal&quot; soll übrigens die Variable sein, die &quot;mitgenommen&quot; werden soll!</p>
<p>Könnt ihr mir helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211470</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Mon, 14 May 2012 18:47:34 GMT</pubDate></item><item><title><![CDATA[Reply to In Rekursion Wert &amp;quot;mitnemen&amp;quot;? on Mon, 14 May 2012 18:55:38 GMT]]></title><description><![CDATA[<p>Du gibst der Funktion einen Parameter mit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211476</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 14 May 2012 18:55:38 GMT</pubDate></item><item><title><![CDATA[Reply to In Rekursion Wert &amp;quot;mitnemen&amp;quot;? on Mon, 14 May 2012 18:58:12 GMT]]></title><description><![CDATA[<p>Ok!</p>
<p>Muss ich mir als Vorgänger das gesamte Element merken, also Wert, Zeiger nach links und Zeiger nach rechts, oder reicht es, sich nur den Wert als int - in meinem Fall als object - zu übergeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211478</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Mon, 14 May 2012 18:58:12 GMT</pubDate></item><item><title><![CDATA[Reply to In Rekursion Wert &amp;quot;mitnemen&amp;quot;? on Mon, 14 May 2012 18:59:44 GMT]]></title><description><![CDATA[<p>Probier's doch aus.</p>
<p>Wenn man alleine ne Lösung findet, ist es i.d.R. viel effektiver, als sich das ganze einfach sagen zu lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211480</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 14 May 2012 18:59:44 GMT</pubDate></item><item><title><![CDATA[Reply to In Rekursion Wert &amp;quot;mitnemen&amp;quot;? on Mon, 14 May 2012 19:01:16 GMT]]></title><description><![CDATA[<p>Alles klar. Bin grad schon dabei <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="🙂"
    /> Wenn was nicht funzen sollte, kann ich ja immer noch fragen...</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211482</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Mon, 14 May 2012 19:01:16 GMT</pubDate></item><item><title><![CDATA[Reply to In Rekursion Wert &amp;quot;mitnemen&amp;quot;? on Mon, 14 May 2012 19:22:47 GMT]]></title><description><![CDATA[<p>Ich hab jetzt meinen Code abgewandelt und die Suchfunktion in eine extra Funktion geschrieben die ich aus der löschfkt. aus aufrufe.</p>
<pre><code class="language-cpp">void searchtree1::DeleteValue(object o)
{
	tree_element1* pred = SearchElement(root, o);	//liefert Zeiger auf den Vorgänger des zu löschenden Elements

}

tree_element1* searchtree1::SearchElement(tree_element1* pred, object o)
{
	//Wert im Baum suchen
	if(root-&gt;val == o)
	{
		return pred;
	}
	else if(o &lt; root-&gt;val)
	{
		pred = root;
		root = root-&gt;left;

		SearchElement(pred, o);
	}
	else
	{
		root = root-&gt;right;
	}
}
</code></pre>
<p>Jetzt hab ich aber nun das Problem, dass ich nicht mehr weiß wie ich weitermachen soll. In DeleteValue steht nun in pred der Zeiger auf den Vorgänger des zu löschenden elements. Muss ich jetzt, bevor ich das zu löschende Element lösche, den Zeiger vom Vorgänger auf den nachfolger des zu löschenden elements umbiegen, oder kann ich auch erst löschen und dann umbiegen? Was ist der Fall, wenn das zu löschende Element ein Blatt im Baum ist? Wie muss ich dann die Zeiger des Vorgänger umbiegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211493</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Mon, 14 May 2012 19:22:47 GMT</pubDate></item></channel></rss>