我正在尝试在avl树中打印给定范围内的节点值。但是当我尝试运行该程序时,我得到NullPointerException。 我无法从同一主题的先前问题中获得太多帮助。我怎么能在这里纠正它。这是我对该部分的代码:
public void range(int low, int up){
if(low >up){
System.out.println("Illegal input");
}
if(this.root != null){
System.out.println(rangeS(this.root,low,up) +"");
}
}
public static int rangeS(AvlNode root,int k1 ,int k2){
int c = 0;
if(root.key >= k1 && root.key <= k2){
c = c+1;
}
if(root.key > k1 ){
rangeS(root.left,k1,k2);
}
if(root.key <k2){
rangeS(root.right,k1,k2);
}
return c;
}
由于您以递归方式调用rangeS
,因此root.left
或/和 root.right
可能会null
。这将导致访问root.key
时出现NPE
。切赫null
,并在呼叫rangeS
之前返回0
。
public static int rangeS(AvlNode root,int k1 ,int k2){
if(root == null) {
return 0;
}
...
}
更新:
要计算树下的顶点数,请将rangeS
的结果添加到计数器c
,例如 c += rangeS(...)
.