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

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Rekursives Suchen und Ersetzen 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 7 Beiträge
Chirs

ok super.

Tausend Dank ! Daumen hoch
eulerscheZahl

Die Reihenfolge ist egal, kannst sie gerne ändern.
Chirs

Ja genau an sowas. Danke dir!

Aber was ich noch nicht ganz verstehe ist warum du die Zeile:

replace(n->right, old, new);

vor der nächsten Bedingung aufrufst.


lg
eulerscheZahl

Hast du an sowas gedacht?
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
#include <stdio.h>
#include <stdlib.h>

struct Node
{
	struct Node *right;
	struct Node *left;
	int value;
};

void printTree(struct Node* n, int depth)
{
	int i;
	if(n==NULL) return;
	printTree(n->right, depth+1);
	for(i=0;i<depth;i++) printf("     ");
	printf("%5d\n",n->value);
	printTree(n->left, depth+1);
}

void replace(struct Node* n, int old, int new) {
	if(n==NULL) return;
	replace(n->right, old, new);
	if (n->value == old) n->value = new;
	replace(n->left, old, new);
}

int main(void)
{
//Baum erstellen
	struct Node* root = (struct Node*)malloc(sizeof(struct Node));
	root->value = 1;
	struct Node* left = (struct Node*)malloc(sizeof(struct Node));
	left->value = 2;
	struct Node* right = (struct Node*)malloc(sizeof(struct Node));
	right->value = 3;
	root->left = left;
	root->right = right;
	struct Node* leftleft = (struct Node*)malloc(sizeof(struct Node));
	leftleft->value = 4;
	left->left = leftleft;
//Ausgabe zur Kontrolle
	printTree(root, 0);
//Ersetzen des Inhalts
	replace(root, 2, 5);
	replace(root, 3, 7);
	printf("\n\n");
//erneute Ausgabe
	printTree(root, 0);
}
Chirs

Leider habe ich noch keinen Code der so einen Baum darstellt.

Es soll nur der Inhalt der Knoten ersetzt werden und das so lange bis der Inhalt im kompletten Baum vollständig ersetzt wurde.


lg
eulerscheZahl

Hast du schon Code zur Darstellung des Baums?
Weißt du, ob nur den Inhalt des Knotens getauscht werden soll, oder auch die Nachfolgerknoten sich ändern?
Chirs Rekursives Suchen und Ersetzen in einem Baum

Meine Frage:
Hallo zusammen,

Ich hätte eine Frage bezüglich einer Aufgabe die mir in meinem Studium gestellt wurde.

Die Aufgabe lautet:
Schreiben Sie eine Prozedur die in einem binären Baum alle Vorkommen eines bestimmten Kontenelements sucht und gegen ein anderes austauscht.

Vielleicht kennt sich ja hier einer mit dem Thema aus und kann mir weiterhelfen.

Das Ganze soll in C realisiert werden.

Vielen Dank schonmal für eure Hilfe :-)

Viele Grüße,

Christoph

Meine Ideen:
Ich versuche zusätzlich diese Aufgabe rekursiv zu lösen und sie vielleicht auf einen nicht binären Baum zu erweitern.

Meine Idee wäre, dass man Terminierungsfälle hat wie z.B.
if(x<b->wurzel&&b->left==x)
b->treeelement=z

Aber leider weiß ich nicht wie es für einen nicht binären Baum aussieht und ob dieser Ansatz richtig ist.