В вашем коде есть две проблемы, и вместе эти проблемы могут объяснить, почему вы не можете понять роль return
.
- Ваш метод
insert(input)
игнорирует возвращаемое значение его insert(node, key)
звонок. Это означает, что если root
равно null
, ничего не будет вставлено в три - . Ваш метод
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 должно иметь смысл.