我想创建一个树形结构,它接受字符串并显示树中的所有内容。请注意,这里的目的不是创建二进制搜索树或与二进制tress相关的任何内容,而是基于以下内容对其进行建模:输入的第一个字符串是“root”,第二个字符串是父级,并且第三个是父节点的子节点。请看插图。然而,父节点的数量可以很多。
基本上,我想了解如何处理这个问题。我熟悉二叉树是如何编码的以及它是如何工作的,但这个实现起来似乎有很多不同。
答案 0 :(得分:1)
在您的情况下,它是一个由节点集合(多个子节点)组成的简单树,其中每个子节点都有一些关联数据和一组子节点。考虑到这一点,让我们有一个名为Node
的类型,它将充当我们树的构建块。并尝试抽象出基本的Node类,可以通过继承来扩展以满足树节点的需求。
注意:虽然你想存储'String',但我会将它设为通用的,以便存储任何类型。
public class Node<T>
{
// Private member-variables
private T data;//This member variable contains the data stored in the node of the type specified by the developer using this class.
private NodeList<T> neighbors = null; //of type `NodeList<T>`. This member variable represents the node's children.
public Node() {}
public Node(T data) : this(data, null) {}
public Node(T data, NodeList<T> neighbors)
{
this.data = data;
this.neighbors = neighbors;
}
public T Value
{
get
{
return data;
}
set
{
data = value;
}
}
protected NodeList<T> Neighbors
{
get
{
return neighbors;
}
set
{
neighbors = value;
}
}
}
}
NodeList
类包含一个强类型的Node<T>
个实例集合。此类派生自Collection<T>
,以便拥有强类型集合,其方法如{{1} 1}}和Add(T), Remove(T)
等重要注意事项是,可以通过构造函数添加任意('n')个节点数,从而创建指定数量的节点在集合中,以及在集合中搜索特定值的元素的方法。
Clear()
最后,我们加入了所有讨论的内容。
public class NodeList<T> : Collection<Node<T>>
{
public NodeList() : base() { }
public NodeList(int initialSize)
{
// Add the specified number of items
for (int i = 0; i < initialSize; i++)
base.Items.Add(default(Node<T>));
}
public Node<T> FindByValue(T value)
{
// search the list for the value
foreach (Node<T> node in Items)
if (node.Value.Equals(value))
return node;
// if we reached here, we didn't find a matching node
return null;
}
}
答案 1 :(得分:0)
.NET中没有用于操作树结构的内置类,原因很简单,就是存在太多变化。
我建议你创建自己的代表二叉树的类。请查看这些主题以获取更多详细信息。