У меня есть класс TreeNode, как показано ниже:
class TreeNode {
int value;
TreeNode left;
TreeNode right;
public TreeNode(int x) {
value = x;
}
Я хочу написать рекурсивный метод содержит (int i) , который вернет true, если i - это значение узла в дереве, в противном случае - false.
Насколько я понимаю, двоичное дерево не нужно упорядочивать, поэтому я не должен сравнивать значение текущего узла сзначение, которое мы ищем.Поэтому я написал следующий метод:
public boolean contains(int i) {
if (value == x) {
return true;
} else {
if (left != null) {
return left.find(i);
}
if (right != null) {
return right.find(i);
}
}
return false;
}
Мои мысли заключались в том, что он проверит, равно ли значение текущего узла значению, которое мы ищем, и если нет, то он должен рекурсивно вызватьметод с левым и правым узлами, если они не равны NULL, в противном случае метод вернет false.
Этот метод в конечном итоге возвращает true, если мы ищем значение, соответствующее узлу слева от дереваОднако, как только мы ищем значение за пределами этого (вправо), оно вернет false.Я часами ковырялся в этом, и я уверен, что есть относительно тривиальное решение, но, похоже, я не могу его найти.