2010-12-10 4 views
3

Hey alle, ich schreibe ein Programm, das eine Zeichenfolgendarstellung eines binären Baums aufnimmt und einen Baum daraus erstellt. Der Code macht für mich Sinn, aber er tut immer noch nicht, was er sollte. Danke an alle. Hier ist ein Code:Klammerdarstellung von BinTree zu BinTree

(((()B(C))D(E))F(G))J(()K((L)M(T)))

private static BinTree<String> findRoot(String s){ 
String tree = s; 
    int i = 0; 
    int count = 0; 
    String root; 
    if(tree.equalsIgnoreCase("()")){ 
     return null; 
    } 
    if(tree.length()==3){ 
     return new BinTree<String>(Character.toString(tree.charAt(1))); 
    } 
    while(i<tree.length()){ 
     if(tree.charAt(i)=='('){ 
      count++; 
     } 
     if(tree.charAt(i)==')'){ 
      count--; 
      if(count==0){ 
       i++; 
       root = Character.toString(tree.charAt(i)); 
       return new BinTree<String>(root, findRoot(tree.substring(1, i-1)), findRoot(tree.substring(i+1))); 
      } 
     } 
     i++; 
    } 
    return null; 
} 
+0

Ist Ihre Baumstruktur (links) root (rechts)? – shoebox639

+0

ja ich denke schon. –

Antwort

1

Start Debugging, indem die Werte von s für jeden Anruf zu findRoot() Inspektion. Der Code sieht gut aus, außer dass ich das Gefühl habe, dass Sie in Ihren substring() Parametern Fehler hintereinander haben.

+0

Warum hast du das Ende meiner Eingabe abgeschnitten? –

+0

@TreverMA Versehentlich. Fest. – marcog

0

Ich sehe, dass, wenn Sie Ihre Wurzel gefunden haben, Sie findRoot rekursiv aufrufen auf alles, was von der Wurzel und alles auf der rechten Seite. Oder eigentlich dazu bestimmt. Der Aufruf für das linke Kind entfernt die Klammern um es herum, aber das richtige nicht. Wenn Sie einen Blattknoten finden, indem Sie auf die Zeichenfolgenlänge 3 prüfen, möchten Sie die Parens beibehalten. So sollte der linke Kind Anruf sein: findRoot(tree.substring(0, i).

0

Entschuldigung: mein niedriger Ruf erlaubt mir nicht direkt zu kommentieren, also muss ich meine Frage über diese Antwort stellen. Ist

(((() B (C)) D (E)) F (G)) J (() K ((L) M (T)))

ein Beispiel String-Eingang - Darstellung eines binären Baumes. Wenn ja, können Sie in Wortform nur ein bisschen vom Baum zur Verfügung stellen. Nur ein paar Blätter würden den Trick machen.