空索引在java中的异常,而在val树中找不到给定范围内的值

时间:2015-03-15 11:07:10

标签: java nullpointerexception avl-tree

我试图在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;
}

1 个答案:

答案 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(...)