Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Rekursiv Verzweigungen zählen in einem Baum » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
Chirs

Ok danke dir

Ich glaub es ist wirklich einfacher es in zwei Funktionen zu packen und erst die Knoten zu zählen.


Vielen Dank für deine Hilfe.
eulerscheZahl

Ja, aber dann musst du das Ergebnis zwischenspeichern.
Chirs

Ok danke trotzdem. smile

Kann man deinen Code auch ohne ? schreiben also in solcher Form wie ich den meinen geschrieben habe ? Weil ich leider diesen Operator nicht benutzen darf.


Grüße
eulerscheZahl

Mir fällt auch nichts besseres ein als der Code, den ich eben geschrieben habe, oder das Zählen aller Knoten und anschließende Subtrahieren von 1.
Chirs

Ja genau soweit waren wir aber wie soll ich das dann einbauen, dass es bei einem Knoten keine Verzweigung gibt ?

Weil daran verzweifle ich gerade ein wenig. verwirrt

Grüße
eulerscheZahl

Hatten wir das nicht schon?
Damit kriegst du bei einem Baum aus einem einzigen Knoten 1 raus.
Chirs

Danke für die Antwort, weil ich es in diesem Stil programmieren sollte:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
int verzweigungen(textbaum *b)
{
if (b==NULL)
return 0;

else if (b->left == NULL) && (b->right == NULL) 
return 1;

else return (verzweigung(b->left)+verzweigung(b->right)); 

};


Dann würde doch dieser Code funktionieren oder ? Da ich beide Terminierungsfälle abgedeckt habe.


Grüße
eulerscheZahl

Es gibt 2 Terminierungsfälle:
Der Knoten selbst ist NULL oder BEIDE Kinder sind NULL (eins reicht nicht, damit kannst du immer noch eine Liste bauen). Wenn wir im 2. Fall trotzdem weitermachen, schadet das aber nicht: dann wird die Funktion mit NULL aufgerufen und wir sind wieder bei Fall 1 (der muss sowieso abgedeckt werden).

Was gibt es denn daran auszusetzen, dass du das nicht nehmen darfst?
code:
1:
2:
3:
4:
5:
if (b == NULL) return 0;
return verzweigung(b->left) + 
    verzweigung(b->right) + 
    (b->left == NULL)?0:1 + 
    (b->right == NULL)?0:1;
Chirs

Meine Terminierungsfälle sind doch:

Wenn b leer return 0
Wenn b->left oder b->right == NULL return 1

Aber wo ich noch nicht ganz durchgeblickt habe ist dass ich doch eigtl noch zwei weitere Terminierungsfälle habe und zwar wenn b->left und b->right !=0 sind es ja zwei Verzweigungen und wenn b->left und b->right = 0 habe ich keine Verzweigung.

Wie sollte ich es dann deiner Meinung nach aufbauen ?


Sry für die Anfängerfrage. Würde mich freuen wenn du mir weiterhelfen könntest.


Grüße
eulerscheZahl

Jetzt hat der Baum mit den 3 Knoten von oben ja gar keine Verzweigungen mehr geschockt
Ich komme mir langsam vor wie Captain Hindsight.
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.