Hallo,
Basierend auf folgender generischer Tree-Implementierung
dvanderboom.wordpres...on-binary-tree-in-c/ habe ich meine Komplexe Treeklasse erweitert/bin daran sie zu erweitern.
Und eine der benötigten Erweiterungen ist, ein TreeNode in einen anderen Node zu mergen. Was ich damit meine habe ich in folgender Grafik visualisiert:
[url=
a.imageshack.us/img7...9644/mergenodes.png]
[/URL]
Gleiche Elemente [der Vergleich zweier Nodes ist bereits implementiert durch Compare] (im gleichen SubTree) sollen also nicht verändert werden, jedoch müssen dann die ChildNodes wieder in den bestehenden gemerged werden -> rekursion, weil das unendlich tief sein kann.
Dazu habe ich folgende generische Methode zu schreiben begonnen, der Bereich in # eingeschlossen sind Versuche, aber an sich völlig funktions
unfähiger Code. Ich bringe die Rekursion nicht hin :/
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:
| public T MergeNode(T Node2Merge, T DestinationNode) {
T MergedNode = (DestinationNode.Clone() as T); T MergedExistingNode;
foreach (T ExistingNode in DestinationNode.Children) { if (Compare(ExistingNode, Node2Merge)) { if(Node2Merge.Children.Count != 0){
MergedExistingNode = MergeNode((Node2Merge.Children[childoffset] as T), ExistingNode); }else{ return MergedNode; } } } MergedNode.Children.Add(Node2Merge); return MergedNode; } |
Die Frage also ganz konkret: Wie geht man beim Mergen von zwei Non-Binary Trees vor, ein node hat die Eigenschaften:
Parent[parentnode | null]
Childern [list<node>]
Weiter habe ich der node-Klasse auch eine Deep-Copy Methode alias Clone() implementiert. Ich komme nur irgendwie nicht auf den richtigen Weg.
Ich bin dankbar für jeden Hinweis
Grüsse