Binary Tree Search K [] Preorder () -Methode: über die allgemeine Rückkehr

stimmen
0

Implementierung verwendet: Laborübung Datenstruktur für Oktober / 28/2011 zu tun: Implementieren Sie einen binären Suchbaum

Problem: K [] Rückkehr von Methoden PREORDER (), inOrder () und postorder ()

Problem Details: Die BST muss nur seine Wurzel als Parameter haben. Die oben genannten Verfahren haben in einer Schnittstelle gegeben von unserem Professor wie folgt beschrieben:

    /**
    * Returns an array of keys filled according
    * to the pre-order traversing in a BST.  
    */      
    public K[] preOrder();      
    public K[] order();         
    public K[] postOrder();

Ich konnte das generische Array mit dem folgenden Code instanziiert:

public K[] preOrder() {

    if (root == null) { return null; }

    ArrayList<K> list = new ArrayList<K>();
    preOrderRecursive(root,list);
    K[] toReturn = (K[]) Array.newInstance(this.getRoot().getKey().getClass(), list.size());

    for (int i = 0; i < list.size(); i++) {
        toReturn[i] = list.get(i);
    }

    return toReturn;
}

Aber, wenn ich die Methode getestet auch von unserem Professor bot eine Testklasse mit, i eine Nullpointer bekam, welche ich denke an die Wurzel des BST Bezug genommen wird, die einmal instanziiert wurde, wurde aber an einem Punkt in dem Test entfernt und wenn es das Verfahren wieder aufruft, gibt die Methode null, und kein leeres Array wie durch den Test zu erwarten:

    (...)

    tree1 = new BSTImpl<Integer, Integer>();
    for (int i = 0; i < SIZE; i++) {
        tree1.insert(i, i);
    }
    tree1.remove(1);
    tree1.remove(2);
    tree1.remove(3);
    tree1.remove(4);
    assertArrayEquals(new Integer[]{},tree1.preOrder());

    (...)

Zu wissen, dass ich nicht den Rückgabetyp noch die Parameter des Verfahrens ändern kann, was kann ich tun, um diese Ausnahme zu vermeiden? Kann ich den Komponententyp erhalten irgendwie und es verwenden, das leere Array zu instanziiert (wie würde ich das tun?)?

Irgendwelche Tipps meinen Code zu verbessern, sind ebenfalls willkommen.

Veröffentlicht am 30/10/2011 um 21:33
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Frage: Haben Sie wirklich brauchen ein Integer Array zurückgegeben? - Das glaube ich nicht.

Ich gehe davon aus assertArrayEquals()nicht nicht den Komponententyp der Arrays überprüfen , sondern vergleicht nur die darin enthaltenen Werte.

Mit dem Code, den Sie zeigte, würde ich sagen, alles, was nicht möglich wäre, aufgrund Typ Löschung.

So versucht , eine Rückkehr Object[]oder was auch immer super-Typ in Ihrem Fall gilt:

return new Object[0];

und

return list.toArray();

(Ungeprüft Abgüsse erforderlich, aber das sollte in Ordnung sein)

BEARBEITEN:

Ok, also <K extends Comparable>?
In diesem Fall Gebrauch:

return new Comparable[0];

und

return (Comparable[])list.toArray(new Comparable[]);

Beantwortet am 30/10/2011 um 22:00
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more