如何建模树结构以用于字符串

时间:2013-05-31 05:13:14

标签: c# data-structures tree

我想创建一个树形结构,它接受字符串并显示树中的所有内容。请注意,这里的目的不是创建二进制搜索树或与二进制tress相关的任何内容,而是基于以下内容对其进行建模:输入的第一个字符串是“root”,第二个字符串是父级,并且第三个是父节点的子节点。请看插图。然而,父节点的数量可以很多。

基本上,我想了解如何处理这个问题。我熟悉二叉树是如何编码的以及它是如何工作的,但这个实现起来似乎有很多不同。enter image description here

2 个答案:

答案 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中没有用于操作树结构的内置类,原因很简单,就是存在太多变化。

我建议你创建自己的代表二叉树的类。请查看这些主题以获取更多详细信息。

Why is there no Tree<T> class in .NET?

Tree data structure in C#