Rekursives Suchen und Ersetzen in einem Baum

Neue Frage »

Auf diesen Beitrag antworten »
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.
 
Auf diesen Beitrag antworten »
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?
Auf diesen Beitrag antworten »
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
Auf diesen Beitrag antworten »
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);
}
 
Auf diesen Beitrag antworten »
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
Auf diesen Beitrag antworten »
eulerscheZahl

Die Reihenfolge ist egal, kannst sie gerne ändern.
Auf diesen Beitrag antworten »
Chirs

ok super.

Tausend Dank ! Daumen hoch
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »