Tôi có lớp:Hủy bỏ bản sao từ cây
class Node
{
public string Name;
public string Address;
public int Id;
public List<Node> Children = new List<Node>;
public Node Parent;
}
Đại diện một nút trong một cái cây.
Bây giờ tôi sẽ xóa các nút trùng lặp khỏi một cây. Lấy ví dụ cây:
Lưu ý: màu xanh lá cây Foo = tím Foo
thuật toán gì sẽ cho phép tôi để loại bỏ các bản sao từ cây để kết thúc với:
-------------------------------------------
Để để xác định rằng Foo màu xanh lá cây không bằng nhau (! =) với màu tím Foo Tôi đoán tôi cần phải có một tài sản khác để lưu trữ ight của nút hoặc một số thuộc tính khác sẽ cho phép tôi cho phép tôi so sánh các nút. Đây là tài sản tôi nghĩ rằng tôi cần (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;
}
}
}
Nếu bạn muốn tạo ra các cây cùng tôi có ở đây là các mã:
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);
gì về các nút trùng lặp với khác nhau trẻ em? – saj
Các nút cha trùng lặp có luôn được đảm bảo để có các subtrees hoàn toàn trùng lặp không? Chỉnh sửa: Wow @saj chúng tôi nghĩ cùng một điều cùng một lúc :) – mellamokb
Nếu bạn có một Tom màu đỏ với hai đứa con, và một Tom đỏ với ba đứa con, thì đầu ra thuật toán của bạn sẽ là gì? –