Java 向BST添加数据的NullPointerException
我正在实现一个BST,它有3个类: BST、BSTNode和配置文件 BST课程Java 向BST添加数据的NullPointerException,java,eclipse,tree,binary-search-tree,Java,Eclipse,Tree,Binary Search Tree,我正在实现一个BST,它有3个类: BST、BSTNode和配置文件 BST课程 public class BST { private static BSTNode root; private BSTNode parent; BST() { root = null; } public void insertProfile(Profile p) { BSTNode newNode = new BSTNode(p);
public class BST {
private static BSTNode root;
private BSTNode parent;
BST() {
root = null;
}
public void insertProfile(Profile p) {
BSTNode newNode = new BSTNode(p);
if (root == null) {
root = newNode;
} else {
BSTNode focusNode = root;
BSTNode parent = null;
int compare = focusNode.getProfile().getName().compareTo(parent.getProfile().getName());
while (true) {
parent = focusNode;
if (compare < 0) {
focusNode = focusNode.left;
if (focusNode == null) {
parent.left = newNode;
return;
} else {
focusNode = focusNode.right;
if (focusNode == null) {
parent.right = newNode;
return;
}
}
}
}
}
}
}
我已经尝试解决这个问题好几个小时了,如果有人能提示我哪里出了问题,我将非常感激。这是因为这段代码(在BST.java
中,就在insertProfile
中的else
语句之后):
BSTNode parent = null;
int compare = focusNode.getProfile().getName().compareTo(parent.getProfile().getName());
您所做的是声明
父级
为空
,然后对其调用一个方法(getProfile
),这就是导致NullPointerException的原因。您必须先实例化父级
。正确插入BST以平衡节点并环绕NullPointer
public static Node insert(Node root,int data) {
if(root == null){
Node node = new Node(data);
root = node;
}else if (data > root.data) {
root.right = insert(root.right , data);
}else if (data < root.data){
root.left = insert(root.left , data);
}
return root;
}
公共静态节点插入(节点根,int数据){
if(root==null){
节点=新节点(数据);
根=节点;
}else if(数据>根数据){
root.right=插入(root.right,数据);
}else if(数据<根数据){
root.left=插入(root.left,数据);
}
返回根;
}
非常感谢!如果我也更改:BSTNode parent=new BSTNode(p);它会工作吗?您必须进行更多更改才能使代码工作;例如,while
循环中的else
语句放错了位置(它应该在第一个if
语句之后,但应该在第二个语句之后)。此外,您希望将求值compare
的语句也移动到while
循环中,以便循环可以终止。对我有帮助的是(物理上)画出流程的每一步,看看我将如何编写代码;您可能会看到中出现的其他几个错误,而则以这种方式循环。
public static Node insert(Node root,int data) {
if(root == null){
Node node = new Node(data);
root = node;
}else if (data > root.data) {
root.right = insert(root.right , data);
}else if (data < root.data){
root.left = insert(root.left , data);
}
return root;
}