2016-04-28 4 views
0

Wie der Titel sagt, brauche ich Hilfe bei der Suche nach max in einem binarytree. Ich versuche es mit Rekursion zu tun.Max in binarytree finden und diesen Knoten zurückgeben

Die Knoten haben eine Instanzvariable der Häufigkeit, die aktualisiert wird, wenn das Element im Knoten ein Duplikat in der Struktur ist und es ist der maximale Wert, der versucht zu erreichen, aber ich bekomme nur eine Null-Null-Erkennung. das ist mein Code:

private Node getMaxFreq(Node node){ 
    Node left = null; 
    Node right = null; 
    if(node == null){ 
     System.out.println("tree is empty"); 
    } 
    if(node.compareTo(node.left) <= 0){ 
     getMaxFreq(node.left); 
    } 
    else{ 
     left = node; 
    } 
    if(node.compareTo(node.right) <= 0){ 
     getMaxFreq(node.right); 
    } 
    else{ 
     right = node; 
    } 

    if(left.compareTo(right) > 0){ 
     return left; 
    } 
    else{ 
     return right; 
    } 


} 
/** 
* method to find the node with highest frequency in tree. 
* @return node with highest frequency. 
*/ 
public void getMaxFreq(){ 
    Node temp = root; 
    System.out.println(getMaxFreq(temp)); 
} 

//Node class 
public class Node implements Comparable<Node> { 
    String word; 
    int freq; 
    Node left; 
    Node right; 

    Node(String word) { 
     this.word = word; 
     freq = 1; 

    } 

    public String toString() { 
     return word + " occurs " + freq + " times."; 
    } 


    public int compareTo(Node other) { 

     return Integer.compare(this.freq, other.freq); 
    } 

} 

Bitte helfen Sie mir !!!

+0

Können Sie auch die Node-Klasse veröffentlichen? –

+0

aktualisiert @ user3747720 – JohnBanana

Antwort

0

hinzufügen return Aussagen vor getMaxFreq(node.left); und anderen Orten so. Ich verstehe Ihren Code nicht genau, aber Sie verwenden nie das Ergebnis rekursiven Aufrufs. Vielleicht sollten Sie sie als Variablen speichern und miteinander vergleichen.

0

Sie überprüfen nicht null bevor Sie left und right verwenden. Schließlich werden Sie in Knoten laufen, die links oder rechts oder beides haben. Sie müssen dafür nachsehen, weil ein Links-/Rechts-NULL Sie - offensichtlich - nicht stören sollte, einen solchen Knoten zu untersuchen oder zu durchqueren, weil dort kein Knoten vorhanden ist.

+0

Können Sie ein wenig mehr bewerten? Ich stecke hier fest. – JohnBanana

+0

@JohnBanana Nein, kann ich nicht. Das ist alles was du brauchst: bevor du versuchst einen Objektreferenz zu benutzen - wie du es zum Beispiel in der Zeile 'if (left.compareTo (right))> 0) {' tust - ** ** musst du überprüfen, dass es nicht 'ist null, oder das Programm wird die Ausnahme auslösen, die Sie bekommen. – MichaelK

Verwandte Themen