Обход и добавление в БДП

181
16 июня 2022, 02:10

Изучаю структуры данных и пытаюсь создать бинарное дерево поиска с дженериками и пройтись по нему в глубину in order. Когда вызываю метод inOrder получаю 8 =/ Сам метод я взяла из учебника по структурам данных.

В чем мои ошибки? Заранее спасибо за объяснения.

  public static void main(String[] args) {
        Tree<Integer> tree = new Tree<Integer>();
        Node<Integer> root = new Node<>(8);
        tree.add(3);
        tree.add(10);
        tree.add(1);
        tree.add(6);
        tree.add(14);
       
        tree.inOrder(root);// Получаю 8
    }
}
public class Tree<T extends Comparable<T>> {
    private Node<T> root;

    public void add(T data) {
        Node<T> node = new Node<>(data);
        if (root == null) {
            root = node;
        } else doInsert(root, node);
    }
    public void doInsert(Node<T> root, Node<T> node) {
        if (node.data.compareTo(root.data) < 0) {
            if (root.left == null) {
                root.left = node;
            } else doInsert(root.left, node);
        } else if (root.right == null) {
            root.right = node;
        } else doInsert(root.right, node);
    }
 public void inOrder(Node<T> root) {
        if (root != null) {
            inOrder(root.left);
            System.out.print(root.data + " ");
            inOrder(root.right);
        }
    }
class Node<T> {
    Node<T> left;
    Node<T> right;
    T data;
    public Node(T data) {
        this.data = data;
    }
}
Answer 1

Проблема в том, что узел root определяемый в

 Node<Integer> root = new Node<>(8);

никак не сзязан с деревом tree и сам по себе не имеет никаких детей, а метод void inOrder(Node<T> root) выводит структуру узла, который ему передали. По-этому выводится только значение из самого узла.

Нужно чтобы первый вызов inOrder брал root из самого объекта дерева.

Вероятно, задумка была такая

public void inOrder() {
    inOrder(this.root);
}
private void inOrder(Node<T> root) {
    if (root != null) {
        inOrder(root.left);
        System.out.print(root.data + " ");
        inOrder(root.right);
   }
}

И вызывать потом так:

Tree<Integer> tree = new Tree<Integer>();
tree.add(8);
tree.add(3);
// добавляем тут еще элементы
tree.inOrder();
READ ALSO
JAVA. счетчик попыток

JAVA. счетчик попыток

недавно начал изучать javaЗадание: сделать игру, в которой пользователю нужно угадать цифру от 0 до 100 + в конце сделать счетчик попыток

198
Проблема с рукописным текстом CSS

Проблема с рукописным текстом CSS

При комбинации свойств для текста:

346
Как задать разные фоны с помощью CSS?

Как задать разные фоны с помощью CSS?

На макете видно эллипс слева и прямоугольник справаТак вот вопрос: как задать два бэкграунда через CSS, чтобы всё хорошо работало?

390
Обращение к первому элементу строки display: grid;

Обращение к первому элементу строки display: grid;

Есть у меня такой HTML: Сейчас там расположена 1 строка на 13 элементов, таких строк будет 6

281