<?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[Baum]]></title><description><![CDATA[<p>Hallo<br />
ich bin gerade dabei mich ein wenig in ADT's reinzufuchsen, doch leider bleib ich an den Bäumen hängen.<br />
Folgenden Baum will ich erzeugen</p>
<p>8<br />
/ \<br />
3 10<br />
/ \ \<br />
1 6 14<br />
/ \ /<br />
4 7 13</p>
<p>Wäre euch sehr verbunden wenn ihr mir meinen Denkfehler vor Augen führt.<br />
hier mein Versuch den Baum zu implementieren: (vergesst showTree() )</p>
<p>#include &quot;stdafx.h&quot;<br />
#include &quot;stdlib.h&quot;</p>
<p>typedef struct Tree{<br />
int key;<br />
struct Tree *left;<br />
struct Tree *right;<br />
struct Tree *parent;<br />
};</p>
<p>static struct Tree *root;</p>
<p>void insTree(int key){<br />
struct Tree *temp = root;<br />
bool isLeaf = false;<br />
temp = (Tree *)malloc(sizeof(struct Tree));<br />
//falls Tree leer<br />
if(root == NULL){<br />
root = temp;<br />
temp-&gt;key = key;<br />
temp-&gt;parent = NULL;<br />
temp-&gt;right = NULL;<br />
temp-&gt;left = NULL;<br />
}<br />
else{<br />
temp = root;<br />
while(isLeaf == false){<br />
//bleibt hier hängen<br />
if(key &lt;= temp-&gt;key){<br />
if(temp-&gt;left == NULL) isLeaf = true;<br />
else temp = temp-&gt;left;<br />
}<br />
else{<br />
if(temp-&gt;right == NULL) isLeaf = true;<br />
else temp = temp-&gt;right;<br />
}<br />
}<br />
}<br />
//Einfügen des neuen Blattes<br />
if(key &lt;= temp-&gt;key){<br />
temp-&gt;parent = temp;<br />
temp-&gt;left = temp;<br />
temp-&gt;right = NULL;<br />
temp-&gt;key = key;<br />
}<br />
if(key &gt; temp-&gt;key){<br />
temp-&gt;parent = temp;<br />
temp-&gt;right = temp;<br />
temp-&gt;left = NULL;<br />
temp-&gt;key = key;<br />
}<br />
}</p>
<p>void showTree(){<br />
struct Tree *element = root;<br />
printf(&quot;\n%i&quot;, element-&gt;key);<br />
}</p>
<p>int main(void){<br />
root = NULL;<br />
insTree(8);<br />
insTree(3);<br />
insTree(10);<br />
insTree(1);<br />
insTree(6);<br />
insTree(14);<br />
insTree(4);<br />
insTree(7);<br />
insTree(13);<br />
showTree();<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188331/baum</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 09:48:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188331.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Jul 2007 13:02:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Baum on Mon, 30 Jul 2007 13:02:48 GMT]]></title><description><![CDATA[<p>Hallo<br />
ich bin gerade dabei mich ein wenig in ADT's reinzufuchsen, doch leider bleib ich an den Bäumen hängen.<br />
Folgenden Baum will ich erzeugen</p>
<p>8<br />
/ \<br />
3 10<br />
/ \ \<br />
1 6 14<br />
/ \ /<br />
4 7 13</p>
<p>Wäre euch sehr verbunden wenn ihr mir meinen Denkfehler vor Augen führt.<br />
hier mein Versuch den Baum zu implementieren: (vergesst showTree() )</p>
<p>#include &quot;stdafx.h&quot;<br />
#include &quot;stdlib.h&quot;</p>
<p>typedef struct Tree{<br />
int key;<br />
struct Tree *left;<br />
struct Tree *right;<br />
struct Tree *parent;<br />
};</p>
<p>static struct Tree *root;</p>
<p>void insTree(int key){<br />
struct Tree *temp = root;<br />
bool isLeaf = false;<br />
temp = (Tree *)malloc(sizeof(struct Tree));<br />
//falls Tree leer<br />
if(root == NULL){<br />
root = temp;<br />
temp-&gt;key = key;<br />
temp-&gt;parent = NULL;<br />
temp-&gt;right = NULL;<br />
temp-&gt;left = NULL;<br />
}<br />
else{<br />
temp = root;<br />
while(isLeaf == false){<br />
//bleibt hier hängen<br />
if(key &lt;= temp-&gt;key){<br />
if(temp-&gt;left == NULL) isLeaf = true;<br />
else temp = temp-&gt;left;<br />
}<br />
else{<br />
if(temp-&gt;right == NULL) isLeaf = true;<br />
else temp = temp-&gt;right;<br />
}<br />
}<br />
}<br />
//Einfügen des neuen Blattes<br />
if(key &lt;= temp-&gt;key){<br />
temp-&gt;parent = temp;<br />
temp-&gt;left = temp;<br />
temp-&gt;right = NULL;<br />
temp-&gt;key = key;<br />
}<br />
if(key &gt; temp-&gt;key){<br />
temp-&gt;parent = temp;<br />
temp-&gt;right = temp;<br />
temp-&gt;left = NULL;<br />
temp-&gt;key = key;<br />
}<br />
}</p>
<p>void showTree(){<br />
struct Tree *element = root;<br />
printf(&quot;\n%i&quot;, element-&gt;key);<br />
}</p>
<p>int main(void){<br />
root = NULL;<br />
insTree(8);<br />
insTree(3);<br />
insTree(10);<br />
insTree(1);<br />
insTree(6);<br />
insTree(14);<br />
insTree(4);<br />
insTree(7);<br />
insTree(13);<br />
showTree();<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334931</guid><dc:creator><![CDATA[joey]]></dc:creator><pubDate>Mon, 30 Jul 2007 13:02:48 GMT</pubDate></item><item><title><![CDATA[Reply to Baum on Mon, 30 Jul 2007 13:08:39 GMT]]></title><description><![CDATA[<p>Benutzt bitte code-Tags, dass kann ja kein Mensch lesen.<br />
Vll wärs auch net schlecht wenn du uns sagen würdest wo genau dein Problem ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334934</guid><dc:creator><![CDATA[Mario Sandler]]></dc:creator><pubDate>Mon, 30 Jul 2007 13:08:39 GMT</pubDate></item><item><title><![CDATA[Reply to Baum on Mon, 30 Jul 2007 13:12:07 GMT]]></title><description><![CDATA[<p>Erstens: sfds</p>
<p>Zeitens:</p>
<pre><code class="language-cpp">temp = (Tree *)malloc(sizeof(struct Tree)); 
//falls Tree leer 
if(root == NULL){ 
  ...
} 
else
{ 
  temp = root; // MEMORY-LEAK
  ...
</code></pre>
<p>In Zeile 8 biegst du den Zeiger 'temp' um auf die Wurzel des bisherigen Baumes - damit verlierst du den Bezug zu dem Speicherplatz, den du für den neuen Knoten vorbereitet hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334937</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 30 Jul 2007 13:12:07 GMT</pubDate></item><item><title><![CDATA[Reply to Baum on Mon, 30 Jul 2007 13:17:31 GMT]]></title><description><![CDATA[<p>&lt;sorry&gt; für die Formatierung, bin neu im Forum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /><br />
Hallo<br />
ich bin gerade dabei mich ein wenig in ADT's reinzufuchsen, doch leider bleib ich an den Bäumen hängen.<br />
Folgenden Baum will ich erzeugen</p>
<pre><code>8
        / \
       3   10
      / \   \
     1   6   14
        / \  /
        4 7 13
</code></pre>
<p>Wäre euch sehr verbunden wenn ihr mir meinen Denkfehler vor Augen führt.<br />
hier mein Versuch den Baum zu implementieren: (vergesst showTree() )</p>
<pre><code>#include &quot;stdafx.h&quot;
#include &quot;stdlib.h&quot;

typedef struct Tree{
	int key;
	struct Tree *left;
	struct Tree *right;
	struct Tree *parent;
};

static struct Tree *root;

void insTree(int key){
	struct Tree *temp = root;
	bool isLeaf = false;
	temp = (Tree *)malloc(sizeof(struct Tree));
	//Wurzel
        if(root == NULL){
		root = temp;
		temp-&gt;key = key;
		temp-&gt;parent = NULL;
		temp-&gt;right = NULL;
		temp-&gt;left = NULL;
	}
	//Auffinden der Stelle für das neue Blatt
        else{
		temp = root;
		while(isLeaf == false){
                        //Debuger bleibt in der IF Bedingung hängen (ka wieso)
			if(key &lt;= temp-&gt;key){
				if(temp-&gt;left == NULL) isLeaf = true;
				else temp = temp-&gt;left;
			}
			else{
				if(temp-&gt;right == NULL) isLeaf = true;
				else temp = temp-&gt;right;
			}
		}
	}
	if(key &lt;= temp-&gt;key){
		temp-&gt;parent = temp;
		temp-&gt;left = temp;
		temp-&gt;right = NULL;
		temp-&gt;key = key;
	}
	if(key &gt; temp-&gt;key){
		temp-&gt;parent = temp;
		temp-&gt;right = temp;
		temp-&gt;left = NULL;
		temp-&gt;key = key;
	}
}

void showTree(){
	struct Tree *element = root;
	printf(&quot;\n%i&quot;, element-&gt;key);
}

int main(void){
	root = NULL;
	insTree(8);
	insTree(3);
	insTree(10);
	insTree(1);
	insTree(6);
	insTree(14);
	insTree(4);
	insTree(7);
	insTree(13);
	showTree();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1334942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334942</guid><dc:creator><![CDATA[joey]]></dc:creator><pubDate>Mon, 30 Jul 2007 13:17:31 GMT</pubDate></item><item><title><![CDATA[Reply to Baum on Mon, 30 Jul 2007 13:25:30 GMT]]></title><description><![CDATA[<p>Selbst wenn der Quelltext jetzt schöner formatiert ist, das obengenannte Problem besteht immer noch - mit der Zuweisung 'temp=root;' verlierst du den letzten möglichen Zugriff auf den per malloc() angeforderten Speicher, danach überschreibst du das jeweils letzte gefundene Blatt mit den neuen Daten.</p>
<p>Zur Lösung benötigst du einen zweiten Tree*, mit dem du die Einfügestelle suchen kannst (oder du veschiebst das malloc() bis zu der Stelle, wo du die Zielposition hast und ein neues Blatt erzeugen willst).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334947</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 30 Jul 2007 13:25:30 GMT</pubDate></item><item><title><![CDATA[Reply to Baum on Mon, 30 Jul 2007 13:42:27 GMT]]></title><description><![CDATA[<p>also die neue Formatierung hab ich in dem Moment erstellt als Cstol seine Antwort gepostet hat, also hab ich davon nix mitbekommen.<br />
Aber danke für eure Hinweise ich hab es jetzt folgendermaßen gelöst,<br />
allerdings bleibt der Debuger jetzt an den Stellen hängen an denen ich einen Pointer von element(Parentknoten an den temp angefügt werden soll) auf temp setzen will <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="😞"
    /><br />
Wie gesagt ich bin Anfänger seht es mir bitte nach.</p>
<p>[code]<br />
[ccp]<br />
void insTree(int key){<br />
struct Tree *temp;<br />
struct Tree *element = root;<br />
bool isLeaf = false;<br />
temp = (Tree *)malloc(sizeof(struct Tree));<br />
if(root == NULL){<br />
root = temp;<br />
temp-&gt;key = key;<br />
temp-&gt;parent = NULL;<br />
temp-&gt;right = NULL;<br />
temp-&gt;left = NULL;<br />
}<br />
else{<br />
while(isLeaf == false){<br />
if(key &lt;= element-&gt;key){<br />
if(element-&gt;left == NULL) isLeaf = true;<br />
else{<br />
element = element-&gt;left;<br />
}<br />
}<br />
else{<br />
if(element-&gt;right == NULL) isLeaf = true;<br />
else{<br />
element = element-&gt;right;<br />
}<br />
}<br />
}<br />
}<br />
if(key &lt;= temp-&gt;key){<br />
element-&gt;left = temp;//Debuger bleibt hängen<br />
temp-&gt;parent = element;<br />
temp-&gt;left = NULL;<br />
temp-&gt;right = NULL;<br />
temp-&gt;key = key;<br />
}<br />
if(key &gt; temp-&gt;key){<br />
element-&gt;right = temp;//Debuger bleibt hängen<br />
temp-&gt;parent = element;<br />
temp-&gt;right = NULL;<br />
temp-&gt;left = NULL;<br />
temp-&gt;key = key;<br />
}<br />
}<br />
[/ccp]<br />
[/code</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334965</guid><dc:creator><![CDATA[joey]]></dc:creator><pubDate>Mon, 30 Jul 2007 13:42:27 GMT</pubDate></item><item><title><![CDATA[Reply to Baum on Mon, 30 Jul 2007 13:52:23 GMT]]></title><description><![CDATA[<p>OMG ich weiß was ihr jetzt zum letzten Post sagen wollt, sry!<br />
kann das jemand löschen?</p>
<p>---also die neue Formatierung hab ich in dem Moment erstellt als Cstol seine Antwort gepostet hat, also hab ich davon nix mitbekommen.<br />
Aber danke für eure Hinweise ich hab es jetzt folgendermaßen gelöst,<br />
allerdings bleibt der Debuger jetzt an den Stellen hängen an denen ich einen Pointer von element(Parentknoten an den temp angefügt werden soll) auf temp setzen will <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="😞"
    /><br />
Wie gesagt ich bin Anfänger seht es mir bitte nach. ---</p>
<pre><code>void insTree(int key){
	struct Tree *temp;
	struct Tree *element = root;
	bool isLeaf = false;
	temp = (Tree *)malloc(sizeof(struct Tree));
	if(root == NULL){
		root = temp;
		temp-&gt;key = key;
		temp-&gt;parent = NULL;
		temp-&gt;right = NULL;
		temp-&gt;left = NULL;
	}
	else{
		while(isLeaf == false){
			if(key &lt;= element-&gt;key){
				if(element-&gt;left == NULL) isLeaf = true;
				else{
					element = element-&gt;left;
				}
			}
			else{
				if(element-&gt;right == NULL) isLeaf = true;
				else{
					element = element-&gt;right;
				}
			}
		}
	}
	if(key &lt;= temp-&gt;key){
		element-&gt;left = temp;//Debuger mag diese Stelle nicht
		temp-&gt;parent = element;
		temp-&gt;left = NULL;
		temp-&gt;right = NULL;
		temp-&gt;key = key;
	}
	if(key &gt; temp-&gt;key){
		element-&gt;right = temp;//Debuger mag diese Stelle nicht
		temp-&gt;parent = element;
		temp-&gt;right = NULL;
		temp-&gt;left = NULL;
		temp-&gt;key = key;
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1334974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334974</guid><dc:creator><![CDATA[Joey]]></dc:creator><pubDate>Mon, 30 Jul 2007 13:52:23 GMT</pubDate></item><item><title><![CDATA[Reply to Baum on Mon, 30 Jul 2007 13:54:45 GMT]]></title><description><![CDATA[<p>Und was genau sagt der Debugger an diesen Stellen, wo er hängenbleibt?</p>
<p>(btw, der Teil, der in beiden Zweigen identisch abläuft, kann aus dem if() herausgezogen werden. Und anstelle zweier gegenläufiger if()s kannst du auch if()-else verwenden)</p>
<p>PS: Ist es eigentlich Absicht, daß du nach der Schleife key mit '<em>temp</em>-&gt;key' vergleichst? (das zu vergleichende Baumelement ist in 'element')</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334976</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 30 Jul 2007 13:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to Baum on Mon, 30 Jul 2007 14:04:26 GMT]]></title><description><![CDATA[<pre><code>if(key &lt;= element-&gt;key){//Protest des Debugers
	element-&gt;left = temp;
	temp-&gt;parent = element;
	temp-&gt;left = NULL;
	temp-&gt;right = NULL;
	temp-&gt;key = key;
}
</code></pre>
<p>Debuger:<br />
element 0x00000000 {key=??? left=??? right=??? ...} Tree *<br />
key CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden<br />
left CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden<br />
right CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden<br />
parent CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden</p>
<p>PS. kann mal bitte ein Moderator, die misslungenen Posts von mir entfernen? thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334983</guid><dc:creator><![CDATA[Joey]]></dc:creator><pubDate>Mon, 30 Jul 2007 14:04:26 GMT</pubDate></item><item><title><![CDATA[Reply to Baum on Mon, 30 Jul 2007 14:31:18 GMT]]></title><description><![CDATA[<p>Hab meinen Fehler gefunden, die letzten beiden IF-Konstrukte gehören in den Else Zweig, und nicht auserhalb.<br />
Danke für eure Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1335004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1335004</guid><dc:creator><![CDATA[Joey]]></dc:creator><pubDate>Mon, 30 Jul 2007 14:31:18 GMT</pubDate></item></channel></rss>