【发布时间】:2012-08-28 14:38:20
【问题描述】:
我有课:
class Node
{
public string Name;
public string Address;
public int Id;
public List<Node> Children = new List<Node>;
public Node Parent;
}
表示树中的一个节点。
现在我想从树中删除重复的节点。以树为例:
注意:绿色 Foo != 紫色 Foo
什么算法可以让我从树中删除重复项以得到:
-------------------------------
为了确定绿色 Foo 不等于 (!=) 到紫色 Foo,我想我需要另一个属性来存储节点的高度或其他一些属性,使我能够比较节点.这是我认为我需要的属性(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;
}
}
}
如果你想创建相同的树,我这里有代码:
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);
【问题讨论】:
-
具有不同子节点的重复节点怎么办?
-
是否总是保证重复的父节点也有完全重复的子树?编辑:哇@saj 我们同时想到了同样的事情:)
-
如果你有一个红汤姆有两个孩子,一个红汤姆有三个孩子,你的算法的输出是什么?
-
我不知道如何处理具有不同子节点的重复节点。我想即使它们不同,也要删除它们。
-
@TonoNam:如果你在你自己的数据和你自己的规范中不知道如何处理它们,我们应该怎么做想办法?你想要结果是什么?
标签: c# data-structures tree duplicates