В вашем коде довольно много ошибок, поэтому я удивлен, что все тесты проходят успешно. Кажется, что вы сохраняете маршруты при поиске в дереве, а не когда находите значение.
Я подозреваю, что вы слишком усложняете проблему. Если вы вернете boolean
из вспомогательной функции в зависимости от того, найден ли элемент, вы можете легко добавить направления, когда вернетесь из рекурсии:
private boolean findPath(BinaryNode<T> node, T value, List<BinaryNode.Direction> directions) {
if (node == null) {
return false;
} else if (node.payload.equals(value)) {
return true;
} else if (findPath(node.left, value, directions)) {
directions.add(0, BinaryNode.Direction.LEFT);
return true;
} else if (findPath(node.right, value, directions)) {
directions.add(0, BinaryNode.Direction.RIGHT);
return true;
} else {
return false;
}
}
Обратите внимание, что это вставляет направление в начало списка, чтобы убедиться, что он в правильном порядке. Это также позволяет вам определить, где root имеет значение, потому что он вернет true, но путь будет пустым.