<?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[binary tree - delete node]]></title><description><![CDATA[<p>Hi,</p>
<p>we kann ich für einen binary search tree die methode implementieren um einen knoten aus dem tree zu löschen...kann mir jemand bei dem fall helfen, falls der zu löschende knoten 2 kinder hat?</p>
<pre><code class="language-cpp">bool remove(int val)
	{
		class node *n = NULL;
		n = search(root, val);

                // no node in tree not found
		if(n == NULL)
		{
			return false;
		}
		else
		{
			// only 1 node
			if(!n-&gt;left &amp;&amp; !n-&gt;right)
			{
				n-&gt;father = NULL;
			}
			// only 1 child node
			else if(n-&gt;left &amp;&amp; !n-&gt;right)
			{
				n-&gt;father = n-&gt;left;
				n-&gt;left-&gt;father = n-&gt;father-&gt;father;
				delete n;
			}
			// only 1 child node
			else if(!n-&gt;left &amp;&amp; n-&gt;right)
			{
				n-&gt;father = n-&gt;right;
				n-&gt;right-&gt;father= n-&gt;father-&gt;father;
				delete n;
			}
			// 2 child nodes
			else
			{
                            // ?
			}

			return true;
		}
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/299962/binary-tree-delete-node</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 01:28:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299962.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 22 Feb 2012 06:53:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to binary tree - delete node on Wed, 22 Feb 2012 06:53:01 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>we kann ich für einen binary search tree die methode implementieren um einen knoten aus dem tree zu löschen...kann mir jemand bei dem fall helfen, falls der zu löschende knoten 2 kinder hat?</p>
<pre><code class="language-cpp">bool remove(int val)
	{
		class node *n = NULL;
		n = search(root, val);

                // no node in tree not found
		if(n == NULL)
		{
			return false;
		}
		else
		{
			// only 1 node
			if(!n-&gt;left &amp;&amp; !n-&gt;right)
			{
				n-&gt;father = NULL;
			}
			// only 1 child node
			else if(n-&gt;left &amp;&amp; !n-&gt;right)
			{
				n-&gt;father = n-&gt;left;
				n-&gt;left-&gt;father = n-&gt;father-&gt;father;
				delete n;
			}
			// only 1 child node
			else if(!n-&gt;left &amp;&amp; n-&gt;right)
			{
				n-&gt;father = n-&gt;right;
				n-&gt;right-&gt;father= n-&gt;father-&gt;father;
				delete n;
			}
			// 2 child nodes
			else
			{
                            // ?
			}

			return true;
		}
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2184180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184180</guid><dc:creator><![CDATA[bintree]]></dc:creator><pubDate>Wed, 22 Feb 2012 06:53:01 GMT</pubDate></item><item><title><![CDATA[Reply to binary tree - delete node on Wed, 22 Feb 2012 10:12:11 GMT]]></title><description><![CDATA[<p>bintree schrieb:</p>
<blockquote>
<p>kann mir jemand bei dem fall helfen, falls der zu löschende knoten 2 kinder hat?</p>
</blockquote>
<p>Ja. Derjenige nennt sich Wikipedia und hat einen langen, detaillierten Artikel darüber geschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184224</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 22 Feb 2012 10:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to binary tree - delete node on Wed, 22 Feb 2012 16:41:12 GMT]]></title><description><![CDATA[<p>so wie ich es verstanden habe, muss ich im linken teilbaum des zu löschenden eltern knotens das max. finden und dann mit dem austauschen? und dann das blatt löschen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184359</guid><dc:creator><![CDATA[bintree]]></dc:creator><pubDate>Wed, 22 Feb 2012 16:41:12 GMT</pubDate></item><item><title><![CDATA[Reply to binary tree - delete node on Wed, 22 Feb 2012 16:52:46 GMT]]></title><description><![CDATA[<p>bintree schrieb:</p>
<blockquote>
<p>so wie ich es verstanden habe, muss ich im linken teilbaum des zu löschenden eltern knotens das max. finden und dann mit dem austauschen? und dann das blatt löschen?</p>
</blockquote>
<p>Welches Blatt genau?</p>
<p>Nochmal auf deutsch:<br />
Du willst das Element N löschen. Wenn N zwei Kinder hat, gehst du so vor:<br />
Du suchst das vorherige oder das nächste Element in der Baumordnung. Welches, ist egal, es ist sogar besser, wenn du nicht immer das gleiche nimmst. Nennen wir dieses Element R. Du weist N den Wert des Knotens R zu. Dann löscht du R. Konstruktionsbedingt kann R höchstens auf einer Seite (nämlich der N abgewandten) einen Kindbaum haben, so dass du bei dieser Löschung auf jedem Fall beim einfachen Fall bist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184362</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 22 Feb 2012 16:52:46 GMT</pubDate></item><item><title><![CDATA[Reply to binary tree - delete node on Wed, 22 Feb 2012 21:08:33 GMT]]></title><description><![CDATA[<p>Element N ist der zu löschende knoten</p>
<p>1.) falls das element N einen linken sohn hat:<br />
suche im linken unterbaum nach dem groessten element<br />
vertausche groesstes element mit element N.<br />
lösche ursprünglich groesstes element</p>
<p>2.) falls das element N einen rechten sohn hat:<br />
eigentlich gibt es immer einen linken knoten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184429</guid><dc:creator><![CDATA[bintree]]></dc:creator><pubDate>Wed, 22 Feb 2012 21:08:33 GMT</pubDate></item></channel></rss>