Witam, mam za zadanie napisać program, który z dwóch porządków (in-order i pre-order lub in-order i post-order), wygeneruje pozostały porządek.
Udało mi się napisać funkcję, która generuje post-order, ale z pre-orderem mam problem.
Dla przykładu z tablic:
int postorder[6]={1,5,4,9,8,6};
int inorder[6]= {1,4,5,6,8,9};
Powinno wyjść:
6,4,1,5,8,9
A wywala błąd:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
6 4 1 5 8 at JavaApplication12.preorder(JavaApplication12.java:LINIA1)
at JavaApplication12.preorder(JavaApplication12.java:LINIA2)
at JavaApplication12.preorder(JavaApplication12.java:LINIA2)
A oto funkcja:
public static void preorder(int postorder[], int poststart, int inorder[], int inostart, int length)
{
if(length == 0)
{
return;
}
int i;
for(i = inostart; i < inostart + length; i++)
{
if(postorder[poststart + length - 1] == inorder[i]) //LINIA1
{
break;
}
}
System.out.print(postorder[poststart + length - 1] + " ");
preorder(postorder, poststart, inorder, inostart, i -inostart);
preorder(postorder, i, inorder, inostart +i -poststart, length -i +inostart -1); //LINIA2
}
Jeżeli ktoś by się orientował to proszę o pomoc, bo nawet rozrysowanie na papierze nie pomogło mi wyeliminować błędu.
//Poprawka.