Java оператор возврата logi c с двоичным деревом поиска - PullRequest
0 голосов
/ 06 августа 2020

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

 public void insert(int input){
        insert(root, input);
    }
}

public Node insert(Node node, int key) {
    if (node == null) {
        return new Node(key);
    } else if (node.key > key) {
        node.left = insert(node.left, key);
    } else if (node.key < key) {
        node.right = insert(node.right, key);
    } else {
        return node;
    }
}

Мое понимание того, как работает оператор return в том, что он останавливает функцию и возвращает значение. Следовательно, в этой ситуации создается новый узел с ключом в качестве данных, затем этот узел возвращается. Есть ли что-то еще, что делает оператор return?

1 Ответ

0 голосов
/ 06 августа 2020

В вашем коде есть две проблемы, и вместе эти проблемы могут объяснить, почему вы не можете понять роль return.

  1. Ваш метод insert(input) игнорирует возвращаемое значение его insert(node, key) звонок. Это означает, что если root равно null, ничего не будет вставлено в три
  2. . Ваш метод insert(node, key) не возвращает значения для всех путей кода. Это означает, что код даже не будет компилироваться, а также будет неправильным.

Фиксированный код может выглядеть следующим образом:

public void insert(int input) {
    root = insert(root, input); // 1
}

public Node insert(Node node, int key) {
    if (node == null) {
        return new Node(key);
    }

    if (node.key > key) {
        node.left = insert(node.left, key);
    } else if (node.key < key) {
        node.right = insert(node.right, key);
    }

    return node; // 2
}

Это просто гарантирует, что текущий узел всегда возвращается после того, как вставка имела место (рекурсивно), или если вставка не была произведена, потому что значение уже существует.

Теперь return logi c должно иметь смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...