こんにちは、私は現在、私のプロジェクト(アルゴリズム可視化ツール)のテスト段階を行っています。私は私のBSTのdeleteメソッドに問題が発生しています。バイナリ検索ツリーJavaでの可視化
public boolean delete(String key) {
boolean deleted = true;
boolean finished=false;
BNode current = root;
BNode prev = null;
while (!finished) {
if (key.compareTo(current.key) > 0) {
prev = current;
current = current.right;
this.repaint();
}
else if (key.compareTo(current.key) < 0) {
prev = current;
current = current.left;
this.repaint();
}
else if (key.compareTo(current.key) == 0) {
finished=true;
this.repaint();
}
}
if (check(current) == 0) {
if(current==root)
{
root=null;
xPos=400;
yPos=60;
this.repaint();
}
else
{
if (current.key.compareTo(prev.key) > 0) {
prev.right = null;
this.repaint();
}
else if(current.key.compareTo(prev.key) < 0) {
prev.left = null;
this.repaint();
}
}
}
else if (check(current) == 1) {
if(current==root)
{
prev=current;
if (current.left != null) {
current=current.left;
prev.key=current.key;
prev.left = current.left;
this.repaint();
}
else {
current=current.right;
prev.key=current.key;
prev.right = current.right;
this.repaint();
}
}
else
{
if (current.key.compareTo(prev.key) > 0) {
if (current.left != null) {
prev.right = current.left;
this.repaint();
}
else {
prev.right = current.right;
this.repaint();
}
}
else if(current.key.compareTo(prev.key) < 0) {
if (current.left != null) {
prev.left = current.left;
this.repaint();
}
else {
prev.left = current.right;
this.repaint();
}
}
}
}
else if (check(current) == 2) {
BNode temp = inord(current);
if(current==root)
{
root.key=temp.key;
this.repaint();
}
else
{
if (current.key.compareTo(prev.key) > 0) {
prev.right.key = temp.key;
this.repaint();
}
else {
prev.left.key = temp.key;
this.repaint(0);
}
}
}
return deleted;}
BSTクラス自体のコードはかなり長くなっています。私が子供を持たないノードを削除しようとすると、例9と10を入力(del 10を試してみる)または5と12(del 12を試してみてください)を使用するとnullpointer例外が発生しますが、私は例えば4と8のユーザー(デル8にしようとする)または9、6と5の場合。私は問題がcompareToであると思う。
int check(BNode a) {
int ret;
if ((a.left != null) && (a.right != null)) {
ret = 2;
}
else if ((a.left == null) && (a.right == null)) {
ret = 0;
}
else {
ret = 1;
}
return ret;}
私は本当に必要であれば、クラス全体を投稿することができますthis.Iで助けを必要と
.. はありがとうございました!
NPEのスタックトレースを投稿できますか? – Thomas
視覚化は関係していませんか?次に、投稿のタイトルを変更する必要があります。なぜなら、人々はある視覚化の質問に尋ねることを期待しているからです。 –