Как бы я искал свое двоичное дерево, чтобы найти цель? - PullRequest
0 голосов
/ 28 апреля 2020

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

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

Ниже мой метод find2 должен использовать дерево, созданное моим методом add2. найти выбранный узел. Это также включает мой основной метод.

Вот код:

public boolean add2(E item) {
    root = add2(root, item);
    return addReturn;
}

private Node<E> add2(Node<E> localRoot, E item){
    if(localRoot == null) {
        //Adding item if tree is empty...
        addReturn = true;
        return new Node<>(item);
    } else if (item.compareTo(localRoot.data) == 0) {
        //Returning item if equal to root...
        addReturn = false;
        return localRoot;
    } else if (item.compareTo(localRoot.data) < 0) {
        //Adding item to right side of tree if less than the root...
        localRoot.right = add(localRoot.right, item);
        return localRoot;
    } else {
        //Adding item to left side of tree if grater than the root...
        localRoot.left = add(localRoot.left, item);
        return localRoot;
    }
}

//wrapper method
public E find2(E target) {
    return find2(root, target);
}

//recursive method
private E find2(Node<E> localRoot, E target) {
    if(localRoot == null) {
        return null;
    }
    int compResult2 = target.compareTo(localRoot.data);

    if(compResult2 == 0) {
        return localRoot.data;
    } else if (compResult2 < 0) {
        return find2(localRoot.right, target);
    } else {
        return find2(localRoot.left, target);
    }
}

public class BinarySearchTreeTest {

public static void main(String[] args) {

    //Object creation
    BinarySearchTree<Integer> tree = new BinarySearchTree<>();

    //Tree building...
    tree.add2(50);
    tree.add2(70);
    tree.add2(80);
    tree.add2(60);
    tree.add2(30);
    tree.add2(40);
    tree.add2(20);

    //Output tree
    System.out.println("\nThe built binary search tree:");
    System.out.println("\n" + tree.toString());

    System.out.println("\nSearch the node with data 60: " + tree.find2(60));
    System.out.println("Search the node with data 65: " + tree.find2(65));
    System.out.println("Search the node with data 20: " + tree.find2(20));
    System.out.println("Search the node with data 25: " + tree.find2(25));

}

}

1 Ответ

0 голосов
/ 28 апреля 2020

Я попытался на локальном, изменить в add2 вызов метода на add2 не add

        static class BinarySearchTree<Item extends Comparable> {

        Node root;
        boolean addReturn;

        class Node {
            Item data;
            Node left;
            Node right;

            public Node(Item e) {
                data = e;
            }
        }

        public boolean add2(Item item) {
            root = add2(root, item);
            return addReturn;
        }

        private Node add2(Node localRoot, Item item) {
            if (localRoot == null) {
                // Adding item if tree is empty...
                addReturn = true;
                return new Node(item);
            } else if (item.compareTo(localRoot.data) == 0) {
                // Returning item if equal to root...
                addReturn = false;
                return localRoot;
            } else if (item.compareTo(localRoot.data) < 0) {
                // Adding item to right side of tree if less than the root...
                localRoot.right = add2(localRoot.right, item);
                return localRoot;
            } else {
                // Adding item to left side of tree if grater than the root...
                localRoot.left = add2(localRoot.left, item);
                return localRoot;
            }
        }

        // wrapper method
        public Item find2(Item target) {
            return find2(root, target);
        }

        // recursive method
        private Item find2(Node localRoot, Item target) {
            if (localRoot == null) {
                return null;
            }
            int compResult2 = target.compareTo(localRoot.data);
            if (compResult2 == 0) {
                return localRoot.data;
            } else if (compResult2 < 0) {
                return find2(localRoot.right, target);
            } else {
                return find2(localRoot.left, target);
            }
        }
    }

    public static void main(String[] args) {

        // Object creation
        BinarySearchTree<Integer> tree = new BinarySearchTree<>();

        // Tree building...
        tree.add2(50);
        tree.add2(70);
        tree.add2(80);
        tree.add2(60);
        tree.add2(30);
        tree.add2(40);
        tree.add2(20);

        // Output tree
        System.out.println("\nThe built binary search tree:");
        System.out.println("\n" + tree.toString());

        System.out.println("\nSearch the node with data 60: " + tree.find2(60));
        System.out.println("Search the node with data 65: " + tree.find2(65));
        System.out.println("Search the node with data 20: " + tree.find2(20));
        System.out.println("Search the node with data 25: " + tree.find2(25));

    }

, и дает мне вывод:

Search the node with data 60: 60
Search the node with data 65: null
Search the node with data 20: 20
Search the node with data 25: null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...