Как получить postOrder из заданного InOrder и PreOrder в С#?

Как получить почтовый заказ из заданного заказа и предварительного заказа на С#?

In Order: 8,4,10,9,11,2,5,1,6,5,7.
Pre-order: 1,2,4,8,9,10,11,5,3,6,7.

Это в заказе и предварительном заказе я получаю его из текстовых полей, и когда я нажимаю кнопку в других текстовых полях, я хочу показать результат почтового заказа.

Я уже решил на С++, но у меня есть проблемы с С# с функцией PostOrder.

int search(int arr[], int x, int n)
{
   for (int i = 0; i < n; i++)
     if (arr[i] == x)
        return i;
   return -1;
}

// Prints postorder traversal from given inorder and preorder traversals
void printPostOrder(int in[], int pre[], int n)
{
   // The first element in pre[] is always root, search it
   // in in[] to find left and right subtrees
   int root = search(in, pre[0], n);

   // If left subtree is not empty, print left subtree
   if (root != 0)
      printPostOrder(in, pre+1, root);

   // If right subtree is not empty, print right subtree
   if (root != n-1)
      printPostOrder(in+root+1, pre+root+1, n-root-1);

   // Print root
   cout << pre[0] << " ";
}

person Jove_v    schedule 17.12.2016    source источник
comment
И в чем именно вам нужна помощь?   -  person Abion47    schedule 17.12.2016
comment
с функцией postorder, как создать, я пытаюсь сделать то же самое в С#, но эту часть я не могу понять   -  person Jove_v    schedule 17.12.2016
comment
с функцией postorder, как создать, я пытаюсь сделать то же самое в С#, но не сработала эта часть с рекрутивным вызовом, было бы хорошо, если бы вы могли дать мне какую-нибудь функцию для postorder   -  person Jove_v    schedule 17.12.2016
comment
Это ваш код на С++? Потому что есть несколько причин, по которым этот код не будет компилироваться в C#.   -  person Abion47    schedule 17.12.2016
comment
это функция в С++ да, я хочу, чтобы та же функция была помещена в С#? или какая-то новая функция, но для получения Inorder и Preorder из текстовых полей и для печати из них в обратном порядке   -  person Jove_v    schedule 17.12.2016


Ответы (1)


попробуй это

        int search(int[] arr, int x, int n)
        {
           for (int i = 0; i < n; i++)
             if (arr[i] == x)
                return i;
           return -1;
        }

        // Prints postorder traversal from given inorder and preorder traversals
         void printPostOrder(int[] _in, int[] pre, int n)
         {
           // The first element in pre[] is always root, search it
           // in in[] to find left and right subtrees
           int root = search(_in, pre[0], n);

           // If left subtree is not empty, print left subtree
           if (root != 0)
              printPostOrder(_in, pre.Skip(1).ToArray(), root);

           // If right subtree is not empty, print right subtree
           if (root != n-1)
              printPostOrder(_in.Skip(root+1).ToArray(), pre.Skip(root+1).ToArray(), n-root-1);

           // Print root
           Console.Write(pre[0].ToString() + " ");
         }
person jdweng    schedule 17.12.2016