Java 二叉搜索树实现没有给出正确的值

Java 二叉搜索树实现没有给出正确的值,java,binary-search-tree,abstract-data-type,Java,Binary Search Tree,Abstract Data Type,我试图让BST获取我自己的数据类型,并以正确的顺序输出。问题是,它似乎只是吐出了我添加的最后一个节点,而且它没有正确地排列它们。我不知道为什么,我正在检查我的代码,我对导致这个问题的原因一无所知。任何和所有的帮助都将不胜感激 这是我的主课 public class BinarySearchTree { NodeClass root; public void addNode(DataType data) { NodeClass newNode =

我试图让BST获取我自己的数据类型,并以正确的顺序输出。问题是,它似乎只是吐出了我添加的最后一个节点,而且它没有正确地排列它们。我不知道为什么,我正在检查我的代码,我对导致这个问题的原因一无所知。任何和所有的帮助都将不胜感激

这是我的主课

    public class BinarySearchTree {

    NodeClass root;

    public void addNode(DataType data) {



        NodeClass newNode = new NodeClass(data);



        if (root == null) {

            root = newNode;

        } else {



            NodeClass helperNode = root;



            NodeClass parent;

            while (true) {



                parent = helperNode;



                if (data.studentID < helperNode.data.studentID) {



                    helperNode = helperNode.leftChild;



                    if (helperNode == null) {



                        parent.leftChild = newNode;
                        return; 

                    }

                } else { 

                    helperNode = helperNode.rightChild;



                    if (helperNode == null) {



                        parent.rightChild = newNode;
                        return; // All Done

                    }

                }

            }
        }

    }


    public void inOrderTraverseTree(NodeClass helperNode) {

        if (helperNode != null) {



            inOrderTraverseTree(helperNode.leftChild);



            System.out.println(helperNode);



            inOrderTraverseTree(helperNode.rightChild);

        }

    }

    public void preorderTraverseTree(NodeClass helperNode) {

        if (helperNode != null) {

            System.out.println(helperNode);

            preorderTraverseTree(helperNode.leftChild);
            preorderTraverseTree(helperNode.rightChild);

        }

    }

    public void postOrderTraverseTree(NodeClass helperNode) {

        if (helperNode != null) {

            postOrderTraverseTree(helperNode.leftChild);
            postOrderTraverseTree(helperNode.rightChild);

            System.out.println(helperNode);

        }

    }

    public NodeClass findNode(int ID) {



        NodeClass helperNode = root;



        while (helperNode.data.studentID != ID) {



            if (ID < helperNode.data.studentID) {



                helperNode = helperNode.leftChild;

            } else {



                helperNode = helperNode.rightChild;

            }

            // The node wasn't found

            if (helperNode == null)
                return null;

        }

        return helperNode;

    }

public static void main(String[] args) {

    DataType[] data = new DataType[10];
    data[0] = new DataType();
    data[1] = new DataType();
    data[2] = new DataType();
    data[3] = new DataType();
    data[4] = new DataType();
    data[5] = new DataType();
    data[6] = new DataType();
    data[7] = new DataType();
    data[8] = new DataType();
    data[9] = new DataType();


        BinarySearchTree theTree = new BinarySearchTree();

        data[0].studentID = 77;
        data[0].letterID = 'M';
        data[0].name = "Homer";
        data[0].GPA = 3.5;

        data[1].studentID = 87;
        data[1].letterID = 'W';
        data[1].name = "Bart";
        data[1].GPA = 2.0;

        data[2].studentID = 69;
        data[2].letterID = 'E';
        data[2].name = "Lisa";
        data[2].GPA = 0.5;

        data[3].studentID = 79;
        data[3].letterID = 'O';
        data[3].name = "Marge";
        data[3].GPA = 2.3;

        data[4].studentID = 81;
        data[4].letterID = 'Q';
        data[4].name = "Ned";
        data[4].GPA = 1.6;

        data[5].studentID = 73;
        data[5].letterID = 'I';
        data[5].name = "Burns";
        data[5].GPA = 1.9;

        data[6].studentID = 84;
        data[6].letterID = 'T';
        data[6].name = "Apu";
        data[6].GPA = 2.2;

        data[7].studentID = 71;
        data[7].letterID = 'G';
        data[7].name = "Selma";
        data[7].GPA = 2.7;

        data[8].studentID = 80;
        data[8].letterID = 'P';
        data[8].name = "Max";
        data[8].GPA = 3.5;

        data[9].studentID = 75;
        data[9].letterID = 'K';
        data[9].name = "Nelson";
        data[9].GPA = 3.6;

         theTree.addNode((data[0]));
         theTree.addNode((data[1]));
         theTree.addNode(data[2]);
         theTree.addNode((data[3]));
         theTree.addNode((data[4]));
         theTree.addNode(data[5]);
         theTree.addNode((data[6]));
         theTree.addNode((data[7]));
         theTree.addNode(data[8]);
         theTree.addNode((data[9]));




        // Different ways to traverse binary trees

        //theTree.inOrderTraverseTree(theTree.root);

        // theTree.preorderTraverseTree(theTree.root);

        // theTree.postOrderTraverseTree(theTree.root);

        // Find the node with key 75

    //  System.out.println("\nStudent with the ID 77");

//      System.out.println(theTree.findNode(69));

}
}
这是我必须创建的NodeClass

public class NodeClass
{
    public DataType data;       //our data to pass in

    public NodeClass leftChild;

    public NodeClass rightChild;



    public NodeClass(DataType dataClass)        //our constructor 
    {
        data = dataClass;                       

        leftChild = null;

        rightChild = null;
    }

     public String toString() {



                   // return DataType.name + " has the key " + DataType.studentID;





                      return DataType.name + " has the ID " + DataType.studentID + "\nLeft Child: " + leftChild +

                      "\nRight Child: " + rightChild + "\n";





                }
}

您的问题是所有
数据类型
实例共享相同的
studentID
名称
。删除
静态
关键字

改变

public class DataType {
    public static int studentID;
    public char letterID;
    public static String name;
    public double GPA;
}


我明白了,但是如果我这样做了,ToString方法会抱怨我需要在NodeClass编辑中将它们设置为static:Nvm我让它工作了,谢谢!
public class DataType {
    public static int studentID;
    public char letterID;
    public static String name;
    public double GPA;
}
public class DataType {
    public int studentID;
    public char letterID;
    public String name;
    public double GPA;
}