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

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Rekursives Suchen und Ersetzen in einem Baum » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Rekursives Suchen und Ersetzen in einem Baum
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Chirs
Mitglied


Dabei seit: 23.12.2015
Beiträge: 26

Rekursives Suchen und Ersetzen in einem Baum Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.
23.12.2015 09:15 Chirs ist offline E-Mail an Chirs senden Beiträge von Chirs suchen Nehmen Sie Chirs in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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?

__________________
Syntax Highlighting fürs Board (Link)
23.12.2015 12:56 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Chirs
Mitglied


Dabei seit: 23.12.2015
Beiträge: 26

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
23.12.2015 13:21 Chirs ist offline E-Mail an Chirs senden Beiträge von Chirs suchen Nehmen Sie Chirs in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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);
}


__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 23.12.2015 13:46.

23.12.2015 13:45 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Chirs
Mitglied


Dabei seit: 23.12.2015
Beiträge: 26

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
23.12.2015 14:05 Chirs ist offline E-Mail an Chirs senden Beiträge von Chirs suchen Nehmen Sie Chirs in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Die Reihenfolge ist egal, kannst sie gerne ändern.

__________________
Syntax Highlighting fürs Board (Link)
23.12.2015 14:18 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Chirs
Mitglied


Dabei seit: 23.12.2015
Beiträge: 26

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

ok super.

Tausend Dank ! Daumen hoch
23.12.2015 14:22 Chirs ist offline E-Mail an Chirs senden Beiträge von Chirs suchen Nehmen Sie Chirs in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Rekursives Suchen und Ersetzen in einem Baum