Мне нужна помощь с рекурсией.Я пытаюсь сделать бинарное дерево в C #, мне интересно, можно ли продемонстрировать все обходы Inorder / PostOrder и PreOrder с помощью рекурсивной функции.
Я завершил его для PreOrder, а затем попытался InOrder, однако вызвал исключение StackOverflow, мое понимание двоичного дерева в лучшем случае ненадежно, поэтому любая помощь с этим будет очень признательна, даже если это кажется глупым вопросом.
Следующий код - это то, что я использую для PreOrder Traversal;
public void recursivePreorder(BinaryTreeNode root)
{
Console.Write(root.Data.ToString());
if (root.Left != null)
{
recursivePreorder(root.Left);
}
if (root.Right != null)
{
recursivePreorder(root.Right);
}
}
public void preorderTraversal()
{
if (Root != null)
{
recursivePreorder(Root);
}
else
{
Console.WriteLine("There is no tree to process");
}
static void Main(string[] args)
{
// Build the tree
Test.Add(5);
Test.Add(2);
Test.Add(1);
Test.Add(3);
Test.Add(3); // Duplicates are OK
Test.Add(4);
Test.Add(6);
Test.Add(10);
Test.Add(7);
Test.Add(8);
Test.Add(9);
// Test if we can find values in the tree
for (int Lp = 1; Lp <= 10; Lp++)
Console.WriteLine("Find Student ID ({0}) = {1}", Lp, Test.Find(Lp));
// Test if we can find a non-existing value
Console.WriteLine("Find Student ID (999) = {0}", Test.Find(999));
// Iterate over all members in the tree -- values are returned in sorted order
foreach (int value in Test)
{
Console.WriteLine("Value: {0}", value);
}
Console.WriteLine("Preorder Traversal");
Console.WriteLine("");
Test.preorderTraversal();
Console.WriteLine("");
}
Заранее спасибо, это определенно то, что у меня возникают проблемы, и ядаже не уверен, возможно ли это.