我编写了一个从未排序数组构建BTS的函数
public static TreeNode buildTree(int[] a){
TreeNode parent=new TreeNode();
TreeNode curr=new TreeNode();
curr.e=a[0];
TreeNode root=curr;
int v;
for(int i=1;i<a.length;i++){
curr=root;
v=a[i];
A: while(curr!=null){
if(v>=curr.e) {
parent=curr;
if(curr.right==null) break A;
curr=curr.right;
}
else{
parent=curr;
if(curr.left==null) break A;
curr=curr.left;
}
}
//parent is leaf
if(v>=parent.e){
System.out.println(parent.e);
parent.right=new TreeNode();
parent.right.e=v;
}
else{
parent.left=new TreeNode();
parent.left.e=v;
}
}
return root;
}
如果我没有添加这些行:
if(curr.left==null) break A;
if(curr.right==null) break A;
我得到nullPointerException
。
我不明白为什么。
如果curr.left
为null
,那么我分配curr=curr.left
,我不是curr=null
,而while
循环会中断吗?
将null
分配给这样的对象是不合法的吗?
谢谢!
答案 0 :(得分:0)
哦......抱歉!!!
它有效,之前没有用的原因是我忘记了添加其他{}
parent=curr;
if(curr.left==null) break A;
curr=curr.left;
这就是我有nullPointerException的原因。
if(curr.left==null) break A;
if(curr.right==null) break A;
没必要。
答案 1 :(得分:0)
当我评论这些行时,应用程序无一例外:if(curr.left == null)break A; if(curr.right == null)打破A; 我的代码是buildTree(new int [] {1,0,1});结果是1,没有错误。您可以提供更详细的信息