Реализация бинарного дерева поиска не дает правильных значений

#java #binary-search-tree #abstract-data-type

#java #binary-search-tree #абстрактный-тип данных

Вопрос:

Им пытаются сделать по британскому летнему времени займет тип данных, из моих собственных данных, и выкладывайте в правильном порядке. Проблема в том, что, похоже, он просто выдает последний добавленный мной узел, и он не упорядочивает их правильно. Я не уверен, почему, я просматриваю свой код и рисую пробелы относительно того, что может быть причиной этой проблемы. любая помощь будет оценена.

Это мой основной класс

     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));

}
}
  

Это тип данных, который он должен принимать

 public class DataType {

    public static int studentID;
    public char letterID;
    public static String name;
    public double GPA;

public DataType () 
{
    studentID = studentID;
    letterID = letterID;
    name = name;
    GPA = GPA;


}



public String toString () //otherwise we get refrences 
{
    return "(studentID | "   studentID   "| letterID | "   letterID   "| name | "   name   "GPA"   GPA   "|)";
}

}
  

И это 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";





                }
}
  

Ответ №1:

Ваша проблема в том, что все ваши DataType экземпляры имеют одинаковое studentID name значение и. Удалите static ключевое слово.

Изменить

 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;
}
  

Комментарии:

1. Я вижу, но если я сделаю это, метод toString пожалуется, что мне нужно установить для них значение static в NodeClass Редактировать: Nvm У меня получилось, спасибо, чувак!