2016-12-02 10 views
0

Ich habe ein Programm, wo ich nach einem bestimmten Wort in einem Binärbaum suchen muss, funktioniert der Code, den ich für die Suchmethode für den String gefunden habe, nicht. wenn jemand es sich ansehen könnte, würde ich es sehr schätzen.Binäre Suche Baum String Suche

Ich habe ein paar Änderungen versucht, aber es hat immer noch nicht funktioniert.

public boolean check(BSTNode t,String key){ 
    if(!t.word.equals(key)){ 
     check(t.left,key); 
     check(t.right,key); 
    } 
    else{ 
     return true; 
    } 
    return false; 
} 
+0

Ich habe Ihre Tags bearbeitet. Bitte achten Sie darauf, Tags auszuwählen, die dem Problem entsprechen, nicht nur Wörter, die in Ihrer Frage vorkommen. Zum Beispiel hat das Tag [tag: binary] nichts mit binären Bäumen zu tun. Dies hilft, Ihre Frage vor Leuten zu stellen, die sie beantworten können. Ich habe auch das Tag [tag: java] hinzugefügt, da ich glaube, dass Sie in Java arbeiten. Jetzt kann Stack Overflow Syntax Ihren Code korrekt hervorheben. Wenn dies die falsche Sprache ist, ändern Sie sie bitte. – Chris

Antwort

2

Dies könnte so geschrieben werden;

public boolean check(BSTNode t,String key) { 
    return 
     t.word.equals(key) || check(t.left,key) || check(t.right,key) 
} 

oder ausführlicher;

public boolean check(BSTNode t,String key) { 
    if (t.word.equals(key)) return true; 

    if (check(t.left,key)) return true; 

    if (check(t.right,key)) return true; 

    return false; 
} 

Sie brauchen viel else Aussagen nicht, weil die return Aussagen Ausführung in der Funktion zu stoppen.

Edit:

Sie müssen auch überprüfen, dass Ihr BSTNode nicht null ist, oder werden Sie Null-Zeiger-Ausnahmen erhalten, wenn Sie das Ende des Baumes erreichen.

public boolean check(BSTNode t,String key) { 

    if (t == null) return false; 

    if (t.word.equals(key)) return true; 

    if (check(t.left,key)) return true; 

    if (check(t.right,key)) return true; 

    return false; 
} 

oder;: Dies könnte zu Beginn der Funktion, oder vor den inneren rekursiven check Anrufe erfolgen

public boolean check(BSTNode t,String key) { 
    if (t.word.equals(key)) return true; 

    if (t.left != null && check(t.left,key)) return true; 

    if (t.right != null && check(t.right,key)) return true; 

    return false; 
} 
+0

Vielen Dank für Ihre Zeit, um auf meinen Code zu schauen, ich schätze es wirklich. – user7242310

+0

Sie wetten. Lass es mich wissen, wenn du irgendwelche Fragen hast. – retrospectacus