ho la classe:Rimuovere i duplicati da un albero
class Node
{
public string Name;
public string Address;
public int Id;
public List<Node> Children = new List<Node>;
public Node Parent;
}
per rappresentare un nodo in un albero.
Ora mi piacerebbe rimuovere i nodi duplicati da un albero. Prendete per esempio l'albero:
Nota: verde Foo = Foo viola
Che algoritmo mi permetterà di rimuovere i duplicati dal albero per finire con:
-------------------------------------------
In ordine per determinare che il Foo verde non è uguale (! =) a Foo viola Immagino di aver bisogno di un'altra proprietà che memorizza il ight del nodo o qualche altra proprietà che mi consenta di permettermi di confrontare i nodi. Questa è la proprietà Penso di aver bisogno (CompareId):
class Node
{
public string Name;
public string Address;
public int Id;
public List<Node> Children = new List<Node>();
public Node Parent;
public string CompareId // <----------------- Property I need to compare
{
get
{
var temp = this.Name + this.Address + this.Id;
if (this.Parent == null)
return temp;
else
return temp + this.Parent.CompareId;
}
}
}
Se si desidera creare lo stesso albero che ho qui è il codice:
Node root = new Node() { Name = "Root", Id = 12, Address = "0x0A1F12" };
Node tom1 = new Node() { Name = "Tom", Id = 15, Address = "0x0F1A17", Parent=root };
root.Children.Add(tom1);
Node tom2 = new Node() { Name = "Tom", Id = 15, Address = "0x0F1A17", Parent = root };
root.Children.Add(tom2);
Node foo = new Node() { Name = "Foo", Id = 99, Address = "0x4C0012", Parent=root };
root.Children.Add(foo);
Node foo1 = new Node() { Name = "Foo", Id = 99, Address = "0x4C0012", Parent = tom1 };
tom1.Children.Add(foo1);
Node foo2 = new Node() { Name = "Foo", Id = 99, Address = "0x4C0012", Parent = tom1 };
tom1.Children.Add(foo2);
Node foo3 = new Node() { Name = "Foo", Id = 99, Address = "0x4C0012", Parent = tom2};
tom2.Children.Add(foo3);
Node foo4 = new Node() { Name = "Foo", Id = 99, Address = "0x4C0012", Parent = tom2};
tom2.Children.Add(foo4);
Node joe1 = new Node() { Name = "Joe", Id = 99, Address = "0x605C2C", Parent = foo };
foo.Children.Add(joe1);
Node joe2 = new Node() { Name = "Joe", Id = 99, Address = "0x605C2C", Parent = foo };
foo.Children.Add(joe2);
che dire di nodi duplicati con diversi figli? – saj
I nodi padre duplicati hanno sempre la garanzia di avere anche sottotitoli interamente duplicati? Edit: Wow @saj abbiamo pensato la stessa cosa allo stesso tempo :) – mellamokb
Se avessi un Tom rosso con due bambini e un Tom rosso con tre figli, quale sarebbe l'output del tuo algoritmo? –