Java 在BST中添加和删除节点
当我运行将节点添加到BST的代码时,当我认为JOptionPane消息只应在树的开头或r为null时才显示时,我会不断收到该消息 对于delete方法,我可以输入值,但是节点数据不会被删除,或者我会收到一条JOptionPane消息,说它不在列表中Java 在BST中添加和删除节点,java,binary-search-tree,Java,Binary Search Tree,当我运行将节点添加到BST的代码时,当我认为JOptionPane消息只应在树的开头或r为null时才显示时,我会不断收到该消息 对于delete方法,我可以输入值,但是节点数据不会被删除,或者我会收到一条JOptionPane消息,说它不在列表中 public boolean addToBST(int num) { Root = addToBST(Root, num); return true; } private Node addToBST(Node r, int key)
public boolean addToBST(int num)
{
Root = addToBST(Root, num);
return true;
}
private Node addToBST(Node r, int key)
{
if (r == null)
{
JOptionPane.showMessageDialog(null,"Empty Tree! This will be your root!");
r = new Node(key, null, null);
return r;
}
else{
if(key < r.getData())
{
r.setLeft(addToBST(r.getLeft(), key));
return r;
}
else
{
r.setRight(addToBST(r.getRight(), key));
return r;
}
}
}
public void DeleteFromBST(int key)
{
DeleteFromBST(Root, key);
}
private Node DeleteFromBST(Node r, int key)
{
if(r == null)
{
JOptionPane.showMessageDialog(
null,
" Tree Empty, can not delete "+key,
" Can NOT delete",
JOptionPane.WARNING_MESSAGE);
return null;
}
if(key < r.getData())
{
r.setLeft(DeleteFromBST(r.getLeft(),key));
}
else if (key > r.getData())
{
r.setRight(DeleteFromBST(r.getRight(),key));
}
else
{
if (r.getLeft() == null && r.getRight() == null)
{
r = null;
}
else if (r.getLeft() == null)
{
r = r.getRight();
}
else if(r.getRight() == null)
{
r = r.getLeft();
}
else
{
Node L = r.getRight();
if(L.getLeft()==null)
{
r.setData(L.getData());
r.setRight(L.getRight());
}
else
{
Node t = r;
while(L.getLeft()!=null)
{
t = L;
L = L.getLeft();
}
r.setData(L.getData());
t.setData(L.getData());
}
}
}
return r;
}