使用二进制堆和比较器的Remove()存在循环问题
我们有一个10项的二进制堆。我正在尝试使用比较器使“Remove”函数工作。 我遇到了一个无限循环的情况,不知道确切的原因。什么都可以。谢谢
public E remove() {
int current = 1;
int lastValue = size();
E element = get(lastValue);
set(1,element);
remove(lastValue);
int left = current * 2;
int right = current * 2 +1;
E leftElement= get(left);
E rightElement= get(right);
int value1 = comp.compare(element, leftElement);
int value2 = comp.compare(element, rightElement);
while(value1 == 1 || value2 == 1){
int value3 = comp.compare(leftElement, rightElement);
if (value3 == 1){
//left > right
set(current, rightElement);
set(right, element);
current = right;
}
else{
set(current, leftElement);
set(left, element);
current= left;
}
int left2 = current * 2;
int right2 = current * 2 + 1;
leftElement = get(left2);
rightElement = get(right2);
value1 = comp.compare(element, leftElement);
value2 = comp.compare(element, rightElement);
}
// You must provide
return null;
}
共 (0) 个答案