我遇到了二叉搜索树类的问题,在简单的情况下它工作得很好..但是对于重的搜索树来说它运行不正常 我的意思是,它通过将删除的一个设置为其他人来弄乱树。我认为问题出在删除方法
我的代码:
public void delete(int data) {
root = delete(root, data);
}
private BSTnode delete(BSTnode t, int data) {
BSTnode 2delete;
BSTnode node2delete;
BSTnode parent;
int value;
2delete = getNode(t, data);
if (2delete == null) {
return root;
}
parent = parent(t, 2delete);
if (isLeaf(2delete)) {
if (parent == null) {
return null;
}
if (data< parent.getdata()) {
parent.setLeft(null);
}
else {
parent.setRight(null);
}
return t;
}
if (hasOnlyLeftChild(2delete)) {
if (parent == null) {
return 2delete.getLeft();
}
if (data < parent.getdata()) {
parent.setLeft(parent.getLeft().getLeft());
}
else {
parent.setRight(parent.getRight().getLeft());
}
return t;
}
if (hasOnlyRightChild(2delete)) {
if (parent == null) {
return 2delete.getRight();
}
if (data < parent.getdata()) {
parent.setLeft(parent.getLeft().getRight());
}
else {
parent.setRight(parent.getRight().getRight());
}
return t;
}
node2delete = minNode(2delete.getRight());
value= node2delete.getdata();
t = delete(t, value);
2delete.setdata(value);
return t;
}