我在c#中实现了一个树结构,其中一个节点如下所示
public class Node
{
public int ID{get;set;}
public string Name{get;set;}
public Node Parent {get;set;}
public IList<Node> Children{get;set;}
public IList<Object> Items{get;set;}
public IEnumerable<Ancestors> {get{return this.GetAncestors();}}
}
我想改进我的结构,但我不确定这种树被称为什么,它不是二叉树,因为子计数变化并且可以超过2,我使用递归几乎每个操作得到一个node by Name,Id或删除节点的引用,在我删除节点的情况下,我将Items和Children Properties添加到Parent节点。
我是从头开始做的,我确信有人做得更好,所以请你帮我看一下这个树结构的名称,以便我可以谷歌进行改进吗?
答案 0 :(得分:2)
k-ary tree可能是您最接近的目标。这通常是指一个树,其中每个节点最多有k个子节点(对于某些k,例如二叉树是2-ary树)。
如果您正在寻找每个节点的子节点数无限制的情况,我不相信它有一个特定的名称,它只是被称为树(虽然我想有些资源可能称之为k-ary树也是。)
我在这里看到的一个显而易见的改进地点是对您的结构使用generics(您应该将IList<Object>
替换为通用数据类型,并将Items
重命名为Data
......可能)。
在不知道你想做什么的情况下,我不能说IList<Object>
是否是一个好主意 - 另一种选择可能是让一个类具有特定类型的成员,或者IList<SomeOtherType>
。< / p>
让每个节点存储对其父节点的引用不是那么典型,但是如果需要它,可以完成它。
答案 1 :(得分:1)
有些地方这些结构也被称为n-ary树。如果您需要示例,可以谷歌搜索Tries和B-tree。
我认为trie最接近你想要构建的东西