Пытаюсь выполнить поиск в двоичном дереве поиска, но, похоже, я не могу понять, почему оператор there не работает, метод вызывает ввод строки, но говорит, что требуется узел. Есть предложения, как это исправить?

Вот класс узла:

public class Node
{
    String key;
    Node left, right;

    public Node(String entry)
    {
        key = entry;
        left = right = null;
    }

    public Node getLeft()
    {
        return left;
    }

    public Node getRight()
    {
        return right;
    }

    public String getKey(String entry)
    {
        if(this.key.equals(key))
        {
            return key;
        }

        if(entry.compareTo(this.key) < 0)
        {
            return left == null ? null : left.getKey(entry);
        }
        else
        {
            return right == null ? null : right.getKey(entry);
        }
    }

    public void setLeft(Node left)
    {
        this.left = left;
    }

    public void setRight(Node right)
    {
        this.right = right;
    }
}

Вот мое двоичное дерево поиска:

public class BinarySearchTree
{
    Node root;

    public BinarySearchTree()
    {
        root = null;
    }

    public void insert(String key)
    {
        root = insertRec(root, key);
    }

    public Node insertRec(Node root, String key)
    {
        if(root == null)
        {
            root = new Node(key);
            return root;
        }

        if(key.compareTo(root.toString()) == -1)
        {
            root.setLeft(insertRec(root.getLeft(), key));
        }
        else if(key.compareTo(root.toString()) == 1)
        {
            root.setRight(insertRec(root.getRight(), key));
        }

        return root;
    }

    public Node search(String key)
    {
        return root == null ? null : root.getKey(key);
    }

    public void printPostOrder(Node node)
    {
        if(node == null)
            return;

        printPostOrder(root.getLeft());

        printPostOrder(node.getRight());

        System.out.print(node.getKey() + ", ");
    }

    public void printInOrder(Node node)
    {
        if(node == null)
            return;

        printInOrder(node.getLeft());

        System.out.print(node.getKey() + ", ");

        printInOrder(node.getRight());
    }

    public void printPreOrder(Node node)
    {
        if(node == null)
            return;

        System.out.print(node.getKey() + ", ");

        printPreOrder(node.getLeft());

        printPreOrder(node.getRight());
    }

    public void printPostOrder()
    {
        printPostOrder(root);
    }

    public void printInOrder()
    {
        printInOrder(root);
    }

    public void printPreOrder()
    {
        printPreOrder(root);
    }
}

Любая помощь очень ценится, если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

0
Jdmon1998 13 Ноя 2017 в 22:08

1 ответ

Лучший ответ

Как дела ? ваш код неверен в узле класса в методе getKey, измените возвращаемую String на Узел , а ваш if равно и вернитесь к этому.

Пример :.

public Node getKey(String entry)
{
    if(this.key.equals(entry))
    {
        return this;
    }
}

Если вы измените это, ваш код работает.

Полный класс BinarySearchTree протестирован нормально

 public class BinarySearchTree
 {
    Node root;

    public BinarySearchTree()
    {
        root = null;
    }

    public void insert(String key)
    {
        root = insertRec(root, key);
    }

    public Node insertRec(Node root, String key)
    {
        if(root == null)
        {
            root = new Node(key);
            return root;
        }

        if(key.compareTo(root.toString()) == -1)
        {
            root.setLeft(insertRec(root.getLeft(), key));
        }
        else if(key.compareTo(root.toString()) == 1)
        {
            root.setRight(insertRec(root.getRight(), key));
        }

        return root;
    }

    public Node search(String key)
    {
        return root == null ? null : root.getKey(key);
    }

    public void printPostOrder(Node node)
    {
        if(node == null)
            return;

        printPostOrder(root.getLeft());

        printPostOrder(node.getRight());

        System.out.print(node.getKey("") + ", ");
    }

    public void printInOrder(Node node)
    {
        if(node == null)
            return;

        printInOrder(node.getLeft());

        System.out.print(node.getKey("") + ", ");

        printInOrder(node.getRight());
    }

    public void printPreOrder(Node node)
    {
        if(node == null)
            return;

        System.out.print(node.getKey("") + ", ");

        printPreOrder(node.getLeft());

        printPreOrder(node.getRight());
    }

    public void printPostOrder()
    {
        printPostOrder(root);
    }

    public void printInOrder()
    {
        printInOrder(root);
    }

    public void printPreOrder()
    {
        printPreOrder(root);
    }

    public static void main (String args[]){
        BinarySearchTree bs = new BinarySearchTree();
        bs.insert("A");
        bs.search("A");
    }
 }

И узел завершен

public class Node
{
    String key;
    Node left, right;

    public Node(String entry)
    {
        key = entry;
        left = right = null;
    }

    public Node getLeft()
    {
        return left;
    }

    public Node getRight()
    {
        return right;
    }

    public Node getKey(String entry)
    {
        if(this.key.equals(key))
        {
            return this;
        }

        if(entry.compareTo(this.key) < 0)
        {
            return left == null ? null : left.getKey(entry);
        }
        else
        {
            return right == null ? null : right.getKey(entry);
        }
    }

    public void setLeft(Node left)
    {
        this.left = left;
    }

    public void setRight(Node right)
    {
        this.right = right;
    }
}
0
Evandro Mendes 13 Ноя 2017 в 19:40