Двоичное дерево C # - Inorder / Preorder и PostOrder (справка по рекурсии)

Мне нужна помощь с рекурсией. Я пытаюсь создать двоичное дерево на 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("");
    }

Заранее спасибо, это определенно то, о чем я не могу разобраться, и я даже не уверен, возможно ли это.

5
задан Aditya 7 January 2014 в 20:57
поделиться