有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用二进制堆和比较器的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) 个答案