Почему неправильно работает метод поиска в бинарном дереве поиска?
Подскажите, где ошибка и как его исправить.
public class BSTree {
private Node root;
public BSTree() {
}
public void insert(int value) {
Node parent = null;
Node current = root;
while (current != null) {
parent = current;
if (value >= current.value)
current = current.right;
else
current = current.left;
}
if (parent != null) {
if (value >= parent.value)
parent.right = new Node(value);
else
parent.left = new Node(value);
} else {
root = new Node(value);
}
}
public Node search(int key) {
return recursiveSearch(key, root);
}
private Node recursiveSearch(int key, Node node) {
if (node != null) {
if (node.value > key)
recursiveSearch(key, node.left);
else if (node.value < key)
recursiveSearch(key, node.right);
else
return node;
}
return null;
}
public void remove(int target) {
}
public static class Node {
int value;
Node left;
Node right;
public Node(int value) {
this.value = value;
}
}
}
Тест:
public class Main {
public static void main(String[] args) {
BSTree tree = new BSTree();
tree.insert(5);
tree.insert(6);
tree.insert(7);
tree.insert(8);
tree.insert(1);
tree.insert(2);
tree.insert(3);
System.out.println(tree.search(5) != null); // true
System.out.println(tree.search(6) != null); // false
}
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
У вас внутри рекурсии результат никуда не возвращается
private Node recursiveSearch(int key, Node node) {
if (node != null) {
if (node.value > key)
return recursiveSearch(key, node.left);
else if (node.value < key)
return recursiveSearch(key, node.right);
else
return node;
}
return null;
}