2016-11-18 4 views
0

Ich habe einige Probleme mit einem Coding-Projekt von mir. Das Programm ist eine binäre Suchstruktur, die WordCount-Objekte enthält. Diese enthalten nur zwei Felder, eine Zeichenfolge für ein Wort und eine Ganzzahl, die angibt, wie oft das Wort in einer Textdatei angezeigt wird.Java - Wie binäre Suchbaum rekursiv ohne Parameter durchlaufen

Die Methode, mit der ich Probleme habe, muss den Baum durchlaufen, um das gebräuchlichste Wort zu finden. Ich habe eine Methode implementiert, die den Trick machen würde, aber ich habe gerade herausgefunden, dass die Methode rekursiv sein soll und keinen Parameter verwenden soll.

Die Methode, die ich geschrieben habe, ist schon hier:

WordCount getMostCommonWord(BinaryTreeNode<WordCount> wordNode) 
     throws EmptyCollectionException { 

    WordCount current = wordNode.getElement(); 

    BinaryTreeNode left = wordNode.getLeftChild(); 
    BinaryTreeNode right = wordNode.getRightChild(); 

    WordCount maxLeft; 
    WordCount maxRight; 

    if (left != null) { 
     maxLeft = getMostCommonWord(left); 
     if (current.getCount() < maxLeft.getCount()) { 
      current = maxLeft; 
     } 
    } 

    if (right != null) { 
     maxRight = getMostCommonWord(right); 
     if (current.getCount() < maxRight.getCount()) { 
      current = maxRight; 
     } 
    } 

    return current; 
} 

Dies auch das erste Mal, dass ich hier geschrieben habe, so leid, wenn ich etwas falsch gemacht habe. Irgendwelche Hinweise, wie man es ohne Parameter machen könnte, würden viel helfen. Danke im Voraus!

+1

Refactor einfach so, dass Sie 'this' anstelle von' wordNode' verwenden. Und 'left.getMostCommonWord()' anstelle von 'getMostCommonWord (left)'. – 4castle

+0

Was ist die binäre Baumsortierung? Wenn es nach Wortzählung sortiert ist und Sie den Knoten mit der höchsten Wortzählung haben möchten, ist dies der rechte (am weitesten links liegende) Knoten. die Rekursion wäre "wenn ich ein Recht habe, gebe das Ergebnis meiner Rechten zurück, ansonsten gebe mein Ergebnis zurück" –

Antwort

0

Sie sind in der Nähe. Da Sie einen Parameter nicht verwenden können, machen Sie dies direkt zu einer Methode für die Knotenklasse. Dann verwenden Sie this.

Dies hat den Vorteil, generisch zu sein, erfordert aber, dass T, wordCount in Ihrem Fall, implementiert Comparable.

BinaryTreeNode<T> getMaxNode() 
     throws EmptyCollectionException { 

    BinaryTreeNode<T> left = this.getLeftChild(); 
    BinaryTreeNode<T> right = this.getRightChild(); 

    BinaryTreeNode<T> currentMax = this; 
    BinaryTreeNode<T> maxLeft; 
    BinaryTreeNode<T> maxRight; 

    if (left != null) { 
     maxLeft = left.getMaxNode(); 
     if (this.getElement() < maxLeft.getElement()) { 
      currentMax = maxLeft; 
     } 
    } 

    if (right != null) { 
     maxRight = right.getMaxNode(); 
     if (this.getElement() < maxRight.getElement()) { 
      currentMax = maxRight; 
     } 
    } 

    return currentMax; 
} 
Verwandte Themen