排序方法无法正常工作

时间:2014-04-14 16:33:53

标签: java

我正在尝试按特定值对BST中的节点进行排序,由于某种原因,它只是无法正常工作,我不知道我错过了什么......

根据用户输入,菜单将显示高于或低于某个值的记录(在本例中为GPA)。我知道,不是最好的方式,但它还没有完成:

    public void sortGPA (double min, double max) {
        inOrderTraverseTree(root, min, max);
    }

哪个电话

public void inOrderTraverseTree(Node focusNode, double min, double max) {

    if (focusNode != null) {
        inOrderTraverseTree(focusNode.leftChild, min, max);

        if (root.gpa >= min && root.gpa <= max){                
            System.out.println(focusNode);
        }
        else {
            System.out.print("");
        }

        inOrderTraverseTree(focusNode.rightChild, min, max);
    }// end if
}// end inOrderTraverseTree 

因此,每次运行此操作时,如果输入为(minVal, 4.0),则绝对不会显示任何内容。如果它是(0.0, max)则显示整个列表,甚至是那些超出给定范围的值。有一些超级小的东西,我错过了,或者是巨大的,我不知道哈,所以如果你看到任何东西,我会很感激任何反馈。

以下是输出的示例:

All students: 
19    Kyle Johnson Chemistry     1.43
24    Chloe Young History     2.23
23    Bill Guy Accounting     3.32
25    Ashley Holmes Accounting     3.75
22    John Smith History     4.00
---------------------------------
Here are the students above a 3.5 GPA: 
19    Kyle Johnson Chemistry     1.43
24    Chloe Young History     2.23
23    Bill Guy Accounting     3.32
25    Ashley Holmes Accounting     3.75
22    John Smith History     4.00
---------------------------------
Here are the students below a 3.0 GPA: 
---------------------------------

1 个答案:

答案 0 :(得分:1)

我认为问题是你在root.gpa上执行调用,无论你引用的树中的节点在哪里。试试这个。

public void inOrderTraverseTree(Node focusNode, double min, double max) 
{

    if (focusNode != null) {
        inOrderTraverseTree(focusNode.leftChild, min, max);

    if (focusNode.gpa >= min && focusNode.gpa <= max){                
        System.out.println(focusNode);
    }
    else {
        System.out.print("");
    }

    inOrderTraverseTree(focusNode.rightChild, min, max);
    }// end if
}// end inOrderTraverseTree