<?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[C++ Baum]]></title><description><![CDATA[<p>Hallo ich hab da eine frage zum Thema Bäume in C++.<br />
Wenn ich in einem Baum Werte abgespeichert habe und ich will nur die 3 größten Werte wissen wie mach ich das?</p>
<p>Ich denke die Ausgabe ist am besten mit Postorder da die Werte ja absteigend ausgegeben werden. Wenn ich das jetzt so wie unten angegeben mache gibt er mir alle aus.<br />
Da die funktion ja rekursiv ist kann ich ja nicht einfach einen Zähler reingeben der nach 3 Werten die Schleife beendet.</p>
<p>//Ausgabe Postorder (Absteigende Sortierung)<br />
void TreePrintPostorder(node *root, node* z)<br />
{<br />
if (root != z)<br />
{<br />
TreePrintPostorder(root-&gt;l, z);<br />
TreePrintPostorder(root-&gt;r, z);<br />
cout &lt;&lt;root-&gt;messwerte &lt;&lt;&quot; &quot;;<br />
}<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266735/c-baum</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 19:55:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266735.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 May 2010 12:39:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 12:39:10 GMT]]></title><description><![CDATA[<p>Hallo ich hab da eine frage zum Thema Bäume in C++.<br />
Wenn ich in einem Baum Werte abgespeichert habe und ich will nur die 3 größten Werte wissen wie mach ich das?</p>
<p>Ich denke die Ausgabe ist am besten mit Postorder da die Werte ja absteigend ausgegeben werden. Wenn ich das jetzt so wie unten angegeben mache gibt er mir alle aus.<br />
Da die funktion ja rekursiv ist kann ich ja nicht einfach einen Zähler reingeben der nach 3 Werten die Schleife beendet.</p>
<p>//Ausgabe Postorder (Absteigende Sortierung)<br />
void TreePrintPostorder(node *root, node* z)<br />
{<br />
if (root != z)<br />
{<br />
TreePrintPostorder(root-&gt;l, z);<br />
TreePrintPostorder(root-&gt;r, z);<br />
cout &lt;&lt;root-&gt;messwerte &lt;&lt;&quot; &quot;;<br />
}<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896637</guid><dc:creator><![CDATA[michael_xsx]]></dc:creator><pubDate>Thu, 13 May 2010 12:39:10 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 13:34:07 GMT]]></title><description><![CDATA[<p>du gibst die tiefe einfach als parameter der funktion mit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896666</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 13 May 2010 13:34:07 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 13:43:30 GMT]]></title><description><![CDATA[<p>michael_xsx schrieb:</p>
<blockquote>
<p>Da die funktion ja rekursiv ist kann ich ja nicht einfach einen Zähler reingeben der nach 3 Werten die Schleife beendet.</p>
</blockquote>
<p>Doch.</p>
<pre><code class="language-cpp">void TreePrintPostorder(node *root, node* z, int* nochAuszugeben) 
{
if(*nochAuszugeben==0) return;
	if (root != z)
	{
		TreePrintPostorder(root-&gt;l, z, nochAuszugeben);
		TreePrintPostorder(root-&gt;r, z, nochAuszugeben);
		cout &lt;&lt;root-&gt;messwerte &lt;&lt;&quot; &quot;;
		++*nochAuszugeben;
	}
}

void TreePrintPostorder(node *root, node* z, int nochAuszugeben) 
{
	TreePrintPostorder(root, z, &amp;nochAuszugeben);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1896674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896674</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 13 May 2010 13:43:30 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 15:21:52 GMT]]></title><description><![CDATA[<p>Ich denke volkard meinte das so, oder?</p>
<pre><code class="language-cpp">void TreePrintPostorder(node *root, node* z, int* nochAuszugeben) 
{
if(*nochAuszugeben==0) return;
	if (root != z)
	{
		TreePrintPostorder(root-&gt;l, z, nochAuszugeben);
		TreePrintPostorder(root-&gt;r, z, nochAuszugeben);
		if(*nochAuszugeben==0) return;

		cout &lt;&lt;root-&gt;messwerte &lt;&lt;&quot; &quot;;
		--*nochAuszugeben;
	}
}

void TreePrintPostorder(node *root, node* z, int nochAuszugeben) 
{
	TreePrintPostorder(root, z, &amp;nochAuszugeben);
}
</code></pre>
<p>Aber eigentlich wollte ich Fragen, warum du einen Zeiger auf nochAuszugeben der Referenz vorziehst?<br />
Hat das einen Grund oder nur 'Zufall'? Denn Referenzen haben (wie ich finde)<br />
eine übersichtlichere Syntax.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896716</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 13 May 2010 15:21:52 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 15:28:44 GMT]]></title><description><![CDATA[<p>Danke für die Anwort.</p>
<p>ich hab das jetzt mal versucht so zu machen, ich versteh nur nicht warum ich eine 2 Funktion brauche die genau gleich heißt?<br />
Naja es git bei mir ein Problem mit int* nochAuszugeben. Wenn ich das im hauptprogramm auf 3 setze geht es nicht leider.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896721</guid><dc:creator><![CDATA[michael_xsx]]></dc:creator><pubDate>Thu, 13 May 2010 15:28:44 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 15:32:15 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>Aber eigentlich wollte ich Fragen, warum du einen Zeiger auf nochAuszugeben der Referenz vorziehst?<br />
Hat das einen Grund oder nur 'Zufall'? Denn Referenzen haben (wie ich finde)<br />
eine übersichtlichere Syntax.</p>
</blockquote>
<p>Weil ich reinschreibe. Ich optimiere für den Aufrufer, nicht für das Werkzeug. Der Aufrufer muß sehen, daß da eine Veränderung der Variablen geplant ist.</p>
<p>Aber ich hab schon dran gedacht, hier aus Faulheit mal schnell eine Referenz zu nehmen. Dann ist mir aber eingefallen, daß michael_xsx drum gebettelt hat, noch ein wenig mit Zeigern üben zu dürfen. Da hab ich's ihm halt besorgt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896724</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 13 May 2010 15:32:15 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 15:33:44 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//Baum_01
//12.05.2010

#include &lt;conio.h&gt;
#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;windows.h&gt;

using namespace std;

struct node   //Strucktur Baum
{
	int messwerte;
	int info;
	node *l;
	node *r;
};

typedef node* bstPtr;

void selection(int[], int);
void treeinitialize(node* , node*);
void treeinsert(node* , node*, int, int);
void TreePrintInorder(node*  , node*);
void TreePrintPreorder(node* , node*);
void TreePrintPostorder(node* , node*);
void TreePrint3Postorder(node* , node*, int*);
int treesearch(node* , node*, int);
void durchschnitt(node* , node*,int&amp;); 
void deleteall(node* , node*);

void main()
{
	char auswahl2 = 'J';
	do
	{   
		int messwerte = 0;       //Werte
		int einfuegewerte = 0;   //für die automatischen Werte
		int nCount = 0;          //Mitzähler
		int suche = 0;           //für suche
		int search = 0;          //für suche
		int info = 0;          //wird benötigt zusätzlich zu den Werten
		int durchschnittswert = 0;  //für Berechnung

        //Baum
		node* root = new node;   
		node* z = new node;      

        //Bauminetialisiereung
		treeinitialize(root , z);  

		//Eingabe der Zufallszahlen!
		system(&quot;cls&quot;);
		cout &lt;&lt;&quot;Anzahl der Zufallszahlen: &quot;;
		cin &gt;&gt; nCount;

        // Eingabe muss positiv sein!
		if (nCount &lt; 0)    
		{
			do
			{
				cout &lt;&lt;endl;
				cout &lt;&lt;&quot;Die Eingabe muss positiv sein!\n\n&quot;;
				cout &lt;&lt;&quot;Anzahl der Zufallszahlen: &quot;;
				cin &gt;&gt; nCount;

			}while (nCount &lt; 0);
		}

        // Dynamisches array erstellen
		int* nKeys = new int[nCount];  

        // Zufallszahlen erstellen
		srand(GetTickCount());    

        //Array mit Zufahlszahlen befüllen
		for (int i = 0; i&lt;nCount; i++)  
		{
			nKeys[i] = rand() % (nCount*5);
		}

        // Ausgabe der arry Zahlen
		cout &lt;&lt; endl;                     
		cout &lt;&lt;&quot;Zahlen im Array!\n\n&quot;;

		for(int j = 0; j &lt; nCount; j++) 
		{
			cout &lt;&lt; nKeys[j] &lt;&lt;&quot; &quot;;
		} 

        // Sortierung mit Selection (Aufsteigend)
		selection(nKeys, nCount);   

        //Befüllen des Baumes mit automatisch generierten Zahlen
		for(int k = 0; k &lt; nCount; k++) 
		{

			einfuegewerte = nKeys[k];
			info ++;

			treeinsert(root, z, einfuegewerte, info);

		} 

		//Löschen des nicht mehr nötigen dynamischen Arrays
		delete nKeys;

        //Ausgabe der Daten mit Inorder (Aufsteigend)
		cout &lt;&lt; endl;
		cout &lt;&lt;&quot;--------------------\n&quot;;
		cout &lt;&lt;&quot;Inorder-Traverse:\n&quot;;
		cout &lt;&lt;&quot;--------------------\n&quot;;
		TreePrintInorder(root-&gt;r, z);      

        //Ausgabe der Daten mit Preorder
		cout &lt;&lt; endl;
		cout &lt;&lt;&quot;--------------------\n&quot;;
		cout &lt;&lt;&quot;Preorder-Traverse:\n&quot;;
		cout &lt;&lt;&quot;--------------------\n&quot;;
		TreePrintPreorder(root-&gt;r, z);

        //Ausgabe der Daten mit Postorder (Absteigend)
		cout &lt;&lt; endl;
		cout &lt;&lt;&quot;--------------------\n&quot;;
		cout &lt;&lt;&quot;Postorder-Traverse:\n&quot;;
		cout &lt;&lt;&quot;--------------------\n&quot;;
		TreePrintPostorder(root-&gt;r, z);

 //Ausgabe der Daten mit Postorder (Absteigend)
		cout &lt;&lt; endl;
		cout &lt;&lt;&quot;---------------------\n&quot;;
		cout &lt;&lt;&quot;Die größten 3 Zahlen:\n&quot;;
		cout &lt;&lt;&quot;---------------------\n&quot;;
	    TreePrint3Postorder(root, z, 3);

		//Zahl suchen (ob vorhanden oder nicht)
		cout &lt;&lt;&quot;\n\n&quot;;
		cout &lt;&lt;&quot;Geben sie den zu suchende Zahl ein: &quot;;
		cin &gt;&gt; suche;

		search = treesearch(root , z, suche);

		if (search == -1)   // wenn nicht gefunden
		{
			cout &lt;&lt;endl;
			cout&lt;&lt; &quot;Nicht gefunden!\n&quot;;
		}
		else                // wenn gefunden
		{
			cout &lt;&lt;endl; 
			cout &lt;&lt; &quot;Gefunden! &quot; &lt;&lt;endl;
		}

        //Berechnen des Durchschnittswert
		durchschnitt(root-&gt;r, z, durchschnittswert);
		cout &lt;&lt; endl;
		if (durchschnittswert == 0)   //wenn nichts in der Liste
		{
			cout &lt;&lt; endl;
			cout &lt;&lt;&quot;Keine Werte eingegeben!\n&quot;;

		}
		else                         //sonnst
		{
			cout &lt;&lt;&quot;Der Druchschnittswert ist: &quot; &lt;&lt; durchschnittswert/info &lt;&lt; endl;
			durchschnittswert = 0;

		}

        //Baum komplett löschen
		deleteall(root-&gt;r,z);
		root-&gt;r = z;
		info = 0; 
		cout &lt;&lt; endl;
		cout &lt;&lt;&quot;Alle Daten geloescht!\n&quot;;

        //Programm noch einmal ausführen?
		cout &lt;&lt; endl;
		cout &lt;&lt; endl;
		cout &lt;&lt;&quot;Wollen Sie das Programm noch mal ausfuehren? (J/N)\n&quot;; 
		cin &gt;&gt; auswahl2;
		cout &lt;&lt; endl;

        //Löschen des dynamischen Speichers
		delete root;
		delete z;

        //Abbruchbedingung
	}while ( auswahl2 == 'j' || auswahl2 == 'J');  

	_getch();
}

// Selection sortierung (Aufsteigend)
void selection(int nKeys[], int nCount)  
{
	int i, j, min, t = 0;

	for(i = 0; i &lt; nCount; i++) 
	{
		min = i;

		for(j = i+1; j &lt; nCount; j++)
			if(nKeys[j] &lt; nKeys[min])
				min = j;

		t = nKeys[min];
		nKeys[min] = nKeys[i];
		nKeys[i] = t;
	}

    // Ausgabe der Sortierten Zahlen
	cout &lt;&lt;&quot;\n\n&quot;;                     
	cout &lt;&lt;&quot;Zahlen Sortiert im Array!\n\n&quot;;

	for(i = 0; i &lt; nCount; i++) 
	{
		cout &lt;&lt; nKeys[i] &lt;&lt;&quot; &quot;;
	} 
	cout &lt;&lt; endl;
}

//Bauminetialisiereung
void treeinitialize(node *root , node* z)
{
	z-&gt;l = z; 
	z-&gt;r = z; 
	z-&gt;info = -1;
	z-&gt;messwerte = -1;

	root-&gt;r = z; 
	root-&gt;l = z;
	root-&gt;messwerte = 0;
	root-&gt;info = 0;
}

//Einfügen der Elemente in den Baum
void treeinsert(node* root, node* z, int messwerte, int info)
{
	node *p, *x;
	p = root; 
	x = root-&gt;r;

	while(x != z)
	{
		p = x;
		if(messwerte &lt; x-&gt;messwerte)
			x = x-&gt;l;
		else
			x = x-&gt;r;
	}

	x = new node;
	x-&gt;messwerte = messwerte; 
	x-&gt;info = info; 
	x-&gt;l = z; 
	x-&gt;r = z;

	if(messwerte &lt; p-&gt;messwerte)
		p-&gt;l = x;
	else
		p-&gt;r = x;
}

//Ausgabe Inorder (Aufsteigende sortierung , Alphabet)
void TreePrintInorder(node *root , node* z) 
{                                          
	if (root != z)
	{
		TreePrintInorder(root-&gt;l, z);
		cout &lt;&lt; root-&gt;messwerte &lt;&lt;&quot; &quot;;
		TreePrintInorder(root-&gt;r, z);
	}
}

// Ausgabe Prorder (WLR)
void TreePrintPreorder(node *root, node* z) 
{
	if (root != z)
	{
		cout &lt;&lt;root-&gt;messwerte &lt;&lt;&quot; &quot;;
		TreePrintPreorder(root-&gt;l, z);
		TreePrintPreorder(root-&gt;r, z);
	}
}

//Ausgabe Postorder (Absteigende Sortierung)
void TreePrintPostorder(node *root, node* z) 
{
	if (root != z)
	{
		TreePrintPostorder(root-&gt;l, z);
		TreePrintPostorder(root-&gt;r, z);
		cout &lt;&lt;root-&gt;messwerte &lt;&lt;&quot; &quot;;
	}
}
//Ausgabe der größten 3 Zahlen
void TreePrintPostorder(node *root, node* z, int* nochAuszugeben)
{
if(*nochAuszugeben==0) return;
    if (root != z)
    {
        TreePrintPostorder(root-&gt;l, z, nochAuszugeben);
        TreePrintPostorder(root-&gt;r, z, nochAuszugeben);
        cout &lt;&lt;root-&gt;messwerte &lt;&lt;&quot; &quot;;
        ++*nochAuszugeben;
    }
}

//Suche im Baum nach einem Wert
int treesearch(node* root, node* z, int suche)
{
	node *x = root-&gt;r;
	z-&gt;messwerte = suche;

	while(suche != x-&gt;messwerte)
	{	
		if(suche &lt; x-&gt;messwerte)
			x = x-&gt;l;
		else
			x = x-&gt;r;
	}
	return x-&gt;info;
}

//Berechnung für einen Durchschnittswert
//Zusammenzählen der Werte mit Hilfe der Inorder Ausgabe
void durchschnitt(node *root , node* z, int&amp; durchschnittswert) 
{
	if (root != z)
	{
		durchschnitt(root-&gt;l, z,durchschnittswert);
		durchschnittswert += root-&gt;messwerte;
		durchschnitt(root-&gt;r, z,durchschnittswert);
	}
}

//Löschen des gesammten Baumes
void deleteall(node *root, node *z)
{
	if (root-&gt;l != z)
		deleteall(root-&gt;l, z); 

	if (root-&gt;r != z)
		deleteall(root-&gt;r, z);  
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1896725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896725</guid><dc:creator><![CDATA[michael_xsx]]></dc:creator><pubDate>Thu, 13 May 2010 15:33:44 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 15:41:52 GMT]]></title><description><![CDATA[<p>michael_xsx schrieb:</p>
<blockquote>
<p>Danke für die Anwort.</p>
<p>ich hab das jetzt mal versucht so zu machen, ich versteh nur nicht warum ich eine 2 Funktion brauche die genau gleich heißt?<br />
Naja es git bei mir ein Problem mit int* nochAuszugeben. Wenn ich das im hauptprogramm auf 3 setze geht es nicht leider.</p>
</blockquote>
<p>Genau.</p>
<pre><code class="language-cpp">TreePrint3Postorder(root, z, 3);
</code></pre>
<p>geht so nicht. Du mußt Speicher anlegen und dessen Adresse übergeben.</p>
<pre><code class="language-cpp">int merker=3;
TreePrint3Postorder(root, z, &amp;merker);
</code></pre>
<p>Und genau das macht die zweite Funktion! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Natürlich sind CSpilles Reparaturen angebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896729</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 13 May 2010 15:41:52 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 15:48:20 GMT]]></title><description><![CDATA[<p>michael_xsx schrieb:</p>
<blockquote>
<p>ich hab das jetzt mal versucht so zu machen, ich versteh nur nicht warum ich eine 2 Funktion brauche die genau gleich heißt?<br />
Naja es git bei mir ein Problem mit int* nochAuszugeben. Wenn ich das im hauptprogramm auf 3 setze geht es nicht leider.</p>
</blockquote>
<p>Die Funktionen brauchen natürlich nicht den gleichen Namen, es bietet sich nur an.</p>
<p>In deinem Code steht noch ein ++ statt -- und eine zusätzliche Bedingung mit<br />
return fehlt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896733</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 13 May 2010 15:48:20 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 15:52:12 GMT]]></title><description><![CDATA[<p>Danke jetzt geht es!<br />
Das hätte ich selber nicht geschaft, naja da muss ich noch etwas üben in C++.</p>
<p>Der fertige Code vom Programm, falls jemand mal mit Bäumen zu tun hat.</p>
<p>Nochmal großes DANKE!</p>
<pre><code class="language-cpp">//Baum_01
//12.05.2010

#include &lt;conio.h&gt;
#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;windows.h&gt;

using namespace std;

struct node   //Strucktur Baum
{
	int messwerte;
	int info;
	node *l;
	node *r;
};

void selection(int[], int);
void treeinitialize(node* , node*);
void treeinsert(node* , node*, int, int);
void TreePrintInorder(node*  , node*);
void TreePrintPreorder(node* , node*);
void TreePrintPostorder(node* , node*);
void TreePrint3Postorder(node* , node*, int*);
int treesearch(node* , node*, int);
void durchschnitt(node* , node*,int&amp;); 
void deleteall(node* , node*);

void main()
{
	char auswahl2 = 'J';
	do
	{   
		int messwerte = 0;       //Werte
		int einfuegewerte = 0;   //für die automatischen Werte
		int nCount = 0;          //Mitzähler
		int suche = 0;           //für suche
		int search = 0;          //für suche
		int info = 0;            //wird benötigt zusäzlich zu den Werten
		int durchschnittswert = 0;  //für Berechnung
		int merker=3; 

		//Baum
		node* root = new node;   
		node* z = new node;      

		//Bauminetialisiereung
		treeinitialize(root , z);  

		//Eingabe der Zufallszahlen!
		system(&quot;cls&quot;);
		cout &lt;&lt;&quot;Anzahl der Zufallszahlen: &quot;;
		cin &gt;&gt; nCount;

		// Eingabe muss positiv sein!
		if (nCount &lt; 0)    
		{
			do
			{
				cout &lt;&lt;endl;
				cout &lt;&lt;&quot;Die Eingabe muss positiv sein!\n\n&quot;;
				cout &lt;&lt;&quot;Anzahl der Zufallszahlen: &quot;;
				cin &gt;&gt; nCount;

			}while (nCount &lt; 0);
		}

		// Dynamisches array erstellen
		int* nKeys = new int[nCount];  

		// Zufallszahlen erstellen
		srand(GetTickCount());    

		//Array mit Zufahlszahlen befüllen
		for (int i = 0; i&lt;nCount; i++)  
		{
			nKeys[i] = rand() % (nCount*5);
		}

		// Ausgabe der arry Zahlen
		cout &lt;&lt; endl;                     
		cout &lt;&lt;&quot;Zahlen im Array!\n\n&quot;;

		for(int j = 0; j &lt; nCount; j++) 
		{
			cout &lt;&lt; nKeys[j] &lt;&lt;&quot; &quot;;
		} 

		// Sortierung mit Selection (Aufsteigend)
		selection(nKeys, nCount);   

		//Befüllen des Baumes mit automatisch generierten Zahlen
		for(int k = 0; k &lt; nCount; k++) 
		{

			einfuegewerte = nKeys[k];
			info ++;

			treeinsert(root, z, einfuegewerte, info);

		} 

		//Löschen des nicht mehr nötigen dynamischen Arrays
		delete nKeys;

		//Ausgabe der Daten mit Inorder (Aufsteigend)
		cout &lt;&lt; endl;
		cout &lt;&lt;&quot;--------------------\n&quot;;
		cout &lt;&lt;&quot;Inorder-Traverse:\n&quot;;
		cout &lt;&lt;&quot;--------------------\n&quot;;
		TreePrintInorder(root-&gt;r, z);      

		//Ausgabe der Daten mit Preorder
		cout &lt;&lt; endl;
		cout &lt;&lt;&quot;--------------------\n&quot;;
		cout &lt;&lt;&quot;Preorder-Traverse:\n&quot;;
		cout &lt;&lt;&quot;--------------------\n&quot;;
		TreePrintPreorder(root-&gt;r, z);

		//Ausgabe der Daten mit Postorder (Absteigend)
		cout &lt;&lt; endl;
		cout &lt;&lt;&quot;--------------------\n&quot;;
		cout &lt;&lt;&quot;Postorder-Traverse:\n&quot;;
		cout &lt;&lt;&quot;--------------------\n&quot;;
		TreePrintPostorder(root-&gt;r, z);

		//Ausgabe der Daten mit Postorder (Absteigend)
		cout &lt;&lt; endl;
		cout &lt;&lt;&quot;-----------------------\n&quot;;
		cout &lt;&lt;&quot;Die groessten 3 Zahlen:\n&quot;;
		cout &lt;&lt;&quot;-----------------------\n&quot;;
		TreePrint3Postorder(root, z, &amp;merker);

		//Zahl suchen (ob vorhanden oder nicht)
		cout &lt;&lt;&quot;\n\n&quot;;
		cout &lt;&lt;&quot;Geben sie den zu suchende Zahl ein: &quot;;
		cin &gt;&gt; suche;

		search = treesearch(root , z, suche);

		if (search == -1)   // wenn nicht gefunden
		{
			cout &lt;&lt;endl;
			cout&lt;&lt; &quot;Nicht gefunden!\n&quot;;
		}
		else                // wenn gefunden
		{
			cout &lt;&lt;endl; 
			cout &lt;&lt; &quot;Gefunden! &quot; &lt;&lt;endl;
		}

		//Berechnen des Durchschnittswert
		durchschnitt(root-&gt;r, z, durchschnittswert);
		cout &lt;&lt; endl;
		if (durchschnittswert == 0)   //wenn nichts in der Liste
		{
			cout &lt;&lt; endl;
			cout &lt;&lt;&quot;Keine Werte eingegeben!\n&quot;;

		}
		else                         //sonnst
		{
			cout &lt;&lt;&quot;Der Druchschnittswert ist: &quot; &lt;&lt; durchschnittswert/info &lt;&lt; endl;
			durchschnittswert = 0;

		}

		//Baum komplett löschen
		deleteall(root-&gt;r,z);
		root-&gt;r = z;
		info = 0; 
		cout &lt;&lt; endl;
		cout &lt;&lt;&quot;Alle Daten geloescht!\n&quot;;

		//Programm noch einmal ausführen?
		cout &lt;&lt; endl;
		cout &lt;&lt; endl;
		cout &lt;&lt;&quot;Wollen Sie das Programm noch mal ausfuehren? (J/N)\n&quot;; 
		cin &gt;&gt; auswahl2;
		cout &lt;&lt; endl;

		//Löschen des dynamischen Speichers
		delete root;
		delete z;

		//Abbruchbedingung
	}while ( auswahl2 == 'j' || auswahl2 == 'J');  

	_getch();
}

// Selection sortierung (Aufsteigend)
void selection(int nKeys[], int nCount)  
{
	int i, j, min, t = 0;

	for(i = 0; i &lt; nCount; i++) 
	{
		min = i;

		for(j = i+1; j &lt; nCount; j++)
			if(nKeys[j] &lt; nKeys[min])
				min = j;

		t = nKeys[min];
		nKeys[min] = nKeys[i];
		nKeys[i] = t;
	}

	// Ausgabe der Sortierten Zahlen
	cout &lt;&lt;&quot;\n\n&quot;;                     
	cout &lt;&lt;&quot;Zahlen Sortiert im Array!\n\n&quot;;

	for(i = 0; i &lt; nCount; i++) 
	{
		cout &lt;&lt; nKeys[i] &lt;&lt;&quot; &quot;;
	} 
	cout &lt;&lt; endl;
}

//Bauminetialisiereung
void treeinitialize(node *root , node* z)
{
	z-&gt;l = z; 
	z-&gt;r = z; 
	z-&gt;info = -1;
	z-&gt;messwerte = -1;

	root-&gt;r = z; 
	root-&gt;l = z;
	root-&gt;messwerte = 0;
	root-&gt;info = 0;
}

//Einfügen der Elemente in den Baum
void treeinsert(node* root, node* z, int messwerte, int info)
{
	node *p, *x;
	p = root; 
	x = root-&gt;r;

	while(x != z)
	{
		p = x;
		if(messwerte &lt; x-&gt;messwerte)
			x = x-&gt;l;
		else
			x = x-&gt;r;
	}

	x = new node;
	x-&gt;messwerte = messwerte; 
	x-&gt;info = info; 
	x-&gt;l = z; 
	x-&gt;r = z;

	if(messwerte &lt; p-&gt;messwerte)
		p-&gt;l = x;
	else
		p-&gt;r = x;
}

//Ausgabe Inorder (Aufsteigende sortierung , Alphabet)
void TreePrintInorder(node *root , node* z) 
{                                          
	if (root != z)
	{
		TreePrintInorder(root-&gt;l, z);
		cout &lt;&lt; root-&gt;messwerte &lt;&lt;&quot; &quot;;
		TreePrintInorder(root-&gt;r, z);
	}
}

// Ausgabe Prorder (WLR)
void TreePrintPreorder(node *root, node* z) 
{
	if (root != z)
	{
		cout &lt;&lt;root-&gt;messwerte &lt;&lt;&quot; &quot;;
		TreePrintPreorder(root-&gt;l, z);
		TreePrintPreorder(root-&gt;r, z);
	}
}

//Ausgabe Postorder (Absteigende Sortierung)
void TreePrintPostorder(node *root, node* z) 
{
	if (root != z)
	{
		TreePrintPostorder(root-&gt;l, z);
		TreePrintPostorder(root-&gt;r, z);
		cout &lt;&lt;root-&gt;messwerte &lt;&lt;&quot; &quot;;
	}
}
//Ausgabe der größten 3 Zahlen
void TreePrint3Postorder(node *root, node* z, int* nochAuszugeben)
{
	if(*nochAuszugeben==0) return;
	if (root != z)
	{
		TreePrint3Postorder(root-&gt;l, z, nochAuszugeben);
		TreePrint3Postorder(root-&gt;r, z, nochAuszugeben);
		if(*nochAuszugeben==0) return;

		cout &lt;&lt;root-&gt;messwerte &lt;&lt;&quot; &quot;;
		--*nochAuszugeben;
	}
}

void TreePrint3Postorder(node *root, node* z, int nochAuszugeben)
{
	TreePrint3Postorder(root, z, &amp;nochAuszugeben);
} 

//Suche im Baum nach einem Wert
int treesearch(node* root, node* z, int suche)
{
	node *x = root-&gt;r;
	z-&gt;messwerte = suche;

	while(suche != x-&gt;messwerte)
	{	
		if(suche &lt; x-&gt;messwerte)
			x = x-&gt;l;
		else
			x = x-&gt;r;
	}
	return x-&gt;info;
}

//Berechnung für einen Durchschnittswert
//Zusammenzählen der Werte mit Hilfe der Inorder Ausgabe
void durchschnitt(node *root , node* z, int&amp; durchschnittswert) 
{
	if (root != z)
	{
		durchschnitt(root-&gt;l, z,durchschnittswert);
		durchschnittswert += root-&gt;messwerte;
		durchschnitt(root-&gt;r, z,durchschnittswert);
	}
}

//Löschen des gesammten Baumes
void deleteall(node *root, node *z)
{
	if (root-&gt;l != z)
		deleteall(root-&gt;l, z); 

	if (root-&gt;r != z)
		deleteall(root-&gt;r, z);  
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1896737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896737</guid><dc:creator><![CDATA[michael_xsx]]></dc:creator><pubDate>Thu, 13 May 2010 15:52:12 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 15:53:48 GMT]]></title><description><![CDATA[<p>Ach Compiler-Fehler... Hab ich gar nicht bemerkt...</p>
<blockquote>
<p>Wenn ich das im hauptprogramm auf 3 setze geht es nicht leider.</p>
</blockquote>
<p>Mit Fehlermeldung des Compilers oder wenigstens<br />
der Angabe &quot;kompiliert nicht&quot; wäre mir das auch aufgefallen <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/1896741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896741</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 13 May 2010 15:53:48 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 16:03:57 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>CSpille schrieb:</p>
<blockquote>
<p>Aber eigentlich wollte ich Fragen, warum du einen Zeiger auf nochAuszugeben der Referenz vorziehst?<br />
Hat das einen Grund oder nur 'Zufall'? Denn Referenzen haben (wie ich finde)<br />
eine übersichtlichere Syntax.</p>
</blockquote>
<p>Weil ich reinschreibe. Ich optimiere für den Aufrufer, nicht für das Werkzeug. Der Aufrufer muß sehen, daß da eine Veränderung der Variablen geplant ist.</p>
<p>Aber ich hab schon dran gedacht, hier aus Faulheit mal schnell eine Referenz zu nehmen. Dann ist mir aber eingefallen, daß michael_xsx drum gebettelt hat, noch ein wenig mit Zeigern üben zu dürfen. Da hab ich's ihm halt besorgt.</p>
</blockquote>
<p>Klingt sehr plausibel!!! DANKE für die Info!</p>
<p>Ich gehe mal davon aus, dass du bei Objekten solche Angelegenheiten per const<br />
regelst. Verwendest du denn in irgendeinem Fall Referenzen auf einfache Datentypen als Parameter?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896748</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 13 May 2010 16:03:57 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 16:05:45 GMT]]></title><description><![CDATA[<p>Ich könnte mir vorstellen, daß das mit einem int als Parameter und einem int als Rückgabewert, wieviel noch zu machen ist, viel hübscher wäre und dann würde auch wieder eine Funktion ausreichen und alles noch ein bißchen superer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896749</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 13 May 2010 16:05:45 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Baum on Thu, 13 May 2010 16:09:17 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>Verwendest du denn in irgendeinem Fall Referenzen auf einfache Datentypen als Parameter?</p>
</blockquote>
<p>Ich glaube nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896751</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 13 May 2010 16:09:17 GMT</pubDate></item></channel></rss>