Вставьте в бинарное дерево поиска, которое подразумевает универсальность - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь создать бинарное дерево поиска, которое содержит дженерики. я борюсь со вставкой узлов после того, как вставил корень дерева, скорее всего, моя логика вставки неверна. но я не вижу как.

У меня вопрос: что не так с моей логикой вставки, потому что я не могу вставить ни одного узла после корня.

это моя функция вставки

public Node<T> insert(Node<T> node, T data) {
    if (node == null)
    {  System.out.println("1");
        return new Node<T>(data);
    }
    if (node.getData().compareTo(data) < 0) {
        node = new Node<T>(data, insert(node.getLeft(), data),node.getRight());
         System.out.println("2");
        node.setLeft(insert(node.getLeft(), data));
    } else if (node.getData().compareTo(data) > 0) {

         System.out.println("3");
        node = new Node<T>(data, node.getLeft(), insert(node.getRight(), data));
        node.setRight(insert(node.getRight(), data));
    }
    // After insert the new node, check and rebalance the current node if
    // necessary.
    switch (balanceNumber(node)) {
        case 1:
            node = rotateLeft(node);
            break;
        case -1:
            node = rotateRight(node);
            break;
        default:
            return node;
    }
    return node;
}

и вот где я это делаю

public void actionPerformed(ActionEvent e){

    double x = Double.parseDouble(txtXCoord.getText());
    double y = Double.parseDouble(txtYCoord.getText());
    double m = Double.parseDouble(txtMass.getText());
    String name = txtInput.getText();

    switch(e.getActionCommand()){
    case "add":
        try {
            tree.insert( drawPanel.tree.getRoot(), new Body(x,y,m,name));
            drawPanel.setTree(tree);
            //drawPanel.paint(getGraphics());
            drawPanel.setVisible(true);
            tree.PrintTree();


        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        break;

Я должен упомянуть, что у меня есть функция, которая печатает дерево.

1 Ответ

0 голосов
/ 30 апреля 2018

Ваш код будет работать после удаления следующих двух строк: node = new Node<T>(data, insert(node.getLeft(), data),node.getRight()); node = new Node<T>(data, node.getLeft(), insert(node.getRight(), data)); Вам также понадобится ручка для случая, когда node.getData().compareTo(data) == 0. В этом случае вы обновите фактические данные узла.

...