NaRF
Hatifschnacke
hi,
ich starre schon ewigkeiten auf ein paar programmzeilen aus dem informatikunterricht, was mich bis jetzt aber noch nicht dazu befähigt hat, sie zu verstehen .
das programm erstellt einen binärbaum. daten werden eingelesen und dann alphabetisch in eine baumstruktur geschrieben. jedes baum struct enthält einen "infocontainer" (speichert ein char) und 2 zeiger auf die zweige rechts und links von ihm.
ein baum mit dem inhalt unixboard sieht dann z.b. so aus:
hier erstmal das programm:
verständnisprobleme habe ich in der oberen fettgedruckten zeile. ich übergebe der funktion doch einen zeiger auf eine variable des typs BaumTyp (siehe untere fettgedruckte zeile). was hat dann das "&" in der oberen zeile, das mir afaik die adresse vom zeiger liefert, dort verloren? warum kann ich den zeiger nicht einfach wie in der funktion "zeige" übergeben?
ich starre schon ewigkeiten auf ein paar programmzeilen aus dem informatikunterricht, was mich bis jetzt aber noch nicht dazu befähigt hat, sie zu verstehen .
das programm erstellt einen binärbaum. daten werden eingelesen und dann alphabetisch in eine baumstruktur geschrieben. jedes baum struct enthält einen "infocontainer" (speichert ein char) und 2 zeiger auf die zweige rechts und links von ihm.
ein baum mit dem inhalt unixboard sieht dann z.b. so aus:
Code:
|---> x
|---> u
|---> r
|---> o
|---> n
|---> i
|---> d
|---> b
|---> a
hier erstmal das programm:
Code:
# include <iostream>
//# include <conio.h>
# include <string>
using namespace std;
struct BaumTyp {char info; BaumTyp *re, *li;};
// --------------------------------------------
[B]void einfuegen (BaumTyp* &Baum, char Daten)[/B]
// --------------------------------------------
{
if (Baum == NULL)
{
Baum = new BaumTyp;
Baum->info = Daten;
Baum->li = NULL;
Baum->re = NULL;
}
else einfuegen (Daten < Baum->info ? Baum->li : Baum->re, Daten);
}
// ----------------------------------
void zeige (BaumTyp *Baum, int h)
// ----------------------------------
{
int i;
if (Baum != NULL)
{
zeige (Baum->re, h+1);
for (i=1; i<=h; i++) cout << " ";
cout << " |---> " << Baum->info << endl;
zeige (Baum->li, h+1);
}
}
// -----------------------------------
void LWR_Durchlauf (BaumTyp *Baum)
// -----------------------------------
{
if (Baum != NULL)
{
LWR_Durchlauf (Baum->li);
cout << Baum->info << " ";
LWR_Durchlauf (Baum->re);
}
}
// -----------------------------------------------------
void rechtsaussen_anhaengen (BaumTyp *a, BaumTyp *z)
// -----------------------------------------------------
{
if (a->re == NULL) a->re = z;
else rechtsaussen_anhaengen (a->re, z);
}
// ----------------------------
void loeschen (BaumTyp* &z)
// ----------------------------
{
static BaumTyp *h;
h = z;
if (z != NULL)
{
if (z->li == NULL) z = z->re;
else
{
rechtsaussen_anhaengen (z->li, z->re);
z = z->li;
}
delete h;
}
}
// -----------------------------------------------
void suchen_und_loeschen (BaumTyp* &a, char x)
// -----------------------------------------------
{
if (a != NULL) if (a->info == x) loeschen (a);
else if (a->info > x) suchen_und_loeschen (a->li, x);
else suchen_und_loeschen (a->re, x);
}
// ------------
int main ()
// ------------
{
[B]BaumTyp *Baum;[/B]
char Eingabe[20], Zeichen;
int k, L;
Baum = NULL;
cout << "Gib eine Zeichenkette ein: ";
cin >> Eingabe;
L = strlen (Eingabe);
for (k=0; k<L; k++) einfuegen (Baum, Eingabe[k]);
cout << endl;
zeige (Baum, 0);
cout << endl;
LWR_Durchlauf (Baum);
cout << "\n\nWelches zeichen soll geloescht werden: ";
cin >> Zeichen;
suchen_und_loeschen (Baum, Zeichen);
cout << endl;
zeige (Baum, 0);
cout << endl;
LWR_Durchlauf (Baum);
getchar();
return 0;
}
verständnisprobleme habe ich in der oberen fettgedruckten zeile. ich übergebe der funktion doch einen zeiger auf eine variable des typs BaumTyp (siehe untere fettgedruckte zeile). was hat dann das "&" in der oberen zeile, das mir afaik die adresse vom zeiger liefert, dort verloren? warum kann ich den zeiger nicht einfach wie in der funktion "zeige" übergeben?