[Java] Generowanie porządku pre-order


(Rdrfear) #1

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.


(Enterbios) #2

Wklej to co masz wyżej, czyli kod który wywołuje tą funkcje bo nie wiem co przekazujesz do środka.


(Rdrfear) #3

Do środka wrzucam tablicę zawierającą liczby w kolejności post-order i in-order, pozycje, z których ma zacząć oraz ilość liczb.

public static Scanner scan = new Scanner(System.in);


    public static void main(String[] args) 

    {

            int n = scan.nextInt();

            int[] ptab = new int[n];


            for(int o = 0; o < n; o++)

            {

                ptab[o] = scan.nextInt();

            }


            int[] intab = new int[n];


            for(int o = 0; o < n; o++)

            {

                intab[o] = scan.nextInt();

            }

            preorder(ptab, 0, intab, 0, n);

        }

    }

-- Dodane 10.06.2012 (N) 12:56 --

Przepraszam za post pod postem, lecz nie uzyskałem podpowiedzi, a jest mi ona bardzo potrzebna. Podratuje ktoś?