Мне нужна помощь с рекурсией. Я пытаюсь создать двоичное дерево на C #, мне интересно, можно ли продемонстрировать все обходы Inorder / PostOrder и PreOrder с помощью рекурсивной функции.
Я выполнил его для PreOrder, а затем попытался выполнить InOrder, однако вызвал исключение StackOverflow Exception, мое понимание Binary Tree в лучшем случае шаткое, поэтому любая помощь с этим будет очень признательна, даже если это действительно кажется глупым вопросом.
Следующий код - это то, что я использую для 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("");
}
Заранее спасибо, это определенно то, о чем я не могу разобраться, и я даже не уверен, возможно ли это.