在binarytree中查找max并返回该节点

时间:2016-04-28 10:12:09

标签: java search find binary-tree

正如标题所说,我需要帮助在二进制树中找到最大值。我试图用递归来做。

节点有一个频率的实例变量,如果节点中的元素在树中是重复的,那么它会更新,并且它是我试图达到的最大值,但我只是得到了一个nullpointerexception。这是我的代码:

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);
    }

}

请帮帮我!!!

2 个答案:

答案 0 :(得分:0)

return前面添加getMaxFreq(node.left);语句以及其他类似位置。我不完全理解你的代码,但你从不使用递归调用的结果。也许你应该将它们保存为变量并相互比较。

答案 1 :(得分:0)

在使用nullleft之前,您没有检查right。最终,您 会遇到没有左,右或任何一个的节点。你需要检查一下,因为左/右是空的你 - 显然 - 不应该费心去检查或遍历任何这样的节点,因为那里没有节点。