Я пытаюсь пересечь все листовые узлы в дереве с помощью очереди. Но я не могу получить какой-либо результат.Перемещение всех узлов листа в дереве C#
class MyNode<T>
{
public T Data { get; set; }
public MyNode<T> Parent { get; set; }
public List<MyNode<T>> Children = new List<MyNode<T>>();
public MyNode(T data, MyNode<T> parent)
{
Data = data;
Parent = parent;
}
public override string ToString()
{
if (Children == null) return Data.ToString();
return string.Format("{0} {1} ", Data.ToString(), Children.ToString());
}
}
Узел может иметь любое количество детей. И вот что я написал, чтобы распечатать все листовые узлы. Я ничего не могу получить, я думаю, что только последняя строка Console.WriteLine (""); был казнен, но я не могу понять, почему.
public static void PrintSentence(MyNode<string> root)
{
if (root == null) // Return when the tree is empty.
return;
Queue<MyNode<string>> nodeQueue = new Queue<MyNode<string>>();
nodeQueue.Enqueue(root);
MyNode<string> currentNode = root;
while (nodeQueue.Count != 0)
{
currentNode = nodeQueue.Peek();
nodeQueue.Dequeue();
if (currentNode.Children == null) // Print strings only when the current node is a leaf node.
Console.Write(currentNode.Data + " ");
for (int i = 0; i < currentNode.Children.Count(); i++)
nodeQueue.Enqueue(currentNode.Children[i]);
}
Console.WriteLine("");
}
Спасибо за любую помощь. Дерево класса это, на самом деле я не могу найти мое окно отладки в любом месте ... Я только написал метод PrintSentence, и другие вещи были написаны кем-то другим.
class Tree<T>
{
public MyNode<T> Root { get; set; }
public Tree(MyNode<T> root) { Root = root; }
public override string ToString()
{
if (Root == null) return "";
return Root.ToString();
}
}
Можете ли вы предоставить более подробную информацию - в частности, дерева? Также, когда вы выполняете код в отладчике, какой код выполняется и что не выполняется? –