#generics #recursion #tree
Вопрос:
Я пытаюсь создать класс для чтения определенного файла программного обеспечения, данные которого отображаются в древовидной структуре. Я хочу, чтобы класс прошел все дерево путем инициализации. Я использую generic в C# для разработки общего класса, потому что существуют разные типы T. Я ссылаюсь на простую древовидную структуру данных кода для использования с C#
Код выглядит так:
public class TreeNode<T>
{
private readonly T _data;
private readonly TreeNode<T> _parent;
public readonly List<TreeNode<T>> _children;
private readonly int _level;
public int Level { get { return _level; } }
public int Count { get { return _children.Count; } }
public bool IsRoot { get { return _parent == null; } }
public bool IsLeaf { get { return _children.Count == 0; } }
public T Data { get { return _data; } }
public TreeNode<T> Parent { get { return _parent; } }
public TreeNode(T data)
{
_data = data;
_children = new List<TreeNode<T>>();
_level = 0;
}
public TreeNode(T data, TreeNode<T> parent) : this(data)
{
_parent = parent;
_level = _parent != null ? _parent.Level 1 : 0;
}
public TreeNode<T> this[int key]
{
get { return _children[key]; }
}
public void Clear()
{
_children.Clear();
}
public void AddChild(TreeNode<T> value)
{
_children.Add(value);
}
public TreeNode<T> GetChild(int key)
{
return _children[key];
}
}
Но у меня возникла проблема при попытке реализовать рекурсивную функцию. Программа работает бесконечно и не может остановиться, И когда я ее отлаживаю, она показывает, что список детей находится в хаосе.
class CATProductObj : TreeNode<Product>
{
public string prodName;
public CATProductObj(Product rootProd) : base(rootProd) {
prodName = rootProd.get_Name();
Traverse(rootProd);
}
public CATProductObj(Product prod, CATProductObj parentProd) : base(prod, parentProd) {
prodName = prod.get_Name();
}
public void Traverse(Product rootProd)
{
if (rootProd.Products.Count > 0)
{
for(int i=1;i<= rootProd.Products.Count; i )
{
string name = this.prodName;
AddChild(new CATProductObj(rootProd.Products.Item(i), this));
Traverse(GetChild(i-1).Data);
}
}
}
}
Тип Product
-это тип данных из программного обеспечения.
Может кто-нибудь сказать мне, где я ошибаюсь?