我试图在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;
}
答案 0 :(得分:0)
由于您以递归方式rangeS
呼叫,root.left
或/和root.right
可能是null
。访问NPE
时,这将导致root.key
。选择null
并在致电0
之前返回rangeS
。
public static int rangeS(AvlNode root,int k1 ,int k2){
if(root == null) {
return 0;
}
...
}
更新
要计算树下的顶点数,请将rangeS
的结果添加到计数器c
,例如c += rangeS(...)
。