正如标题所说,我需要帮助在二进制树中找到最大值。我试图用递归来做。
节点有一个频率的实例变量,如果节点中的元素在树中是重复的,那么它会更新,并且它是我试图达到的最大值,但我只是得到了一个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);
}
}
请帮帮我!!!
答案 0 :(得分:0)
在return
前面添加getMaxFreq(node.left);
语句以及其他类似位置。我不完全理解你的代码,但你从不使用递归调用的结果。也许你应该将它们保存为变量并相互比较。
答案 1 :(得分:0)
在使用null
和left
之前,您没有检查right
。最终,您 会遇到没有左,右或任何一个的节点。你需要检查一下,因为左/右是空的你 - 显然 - 不应该费心去检查或遍历任何这样的节点,因为那里没有节点。