Я пытаюсь найти путь от узла root к заданной точке, используя рекурсивный алгоритм. Я получаю правильный путь для некоторых точек, но для некоторых я получаю неправильный путь. Пожалуйста, проверьте ниже ссылку для подробного описания проблемы.
Постановка проблемы
Я пробовал ниже код для этого ввода и вывода .
public static List<String> findPathToNode(Node rootNode, Point toFind) {
// @ToDo Implement this routine
List<String> nodeList = new ArrayList<>();
if(toFind.getX() < rootNode.getWidth() && toFind.getY() <rootNode.getWidth()){
return getPath(rootNode, toFind, nodeList);
}
return nodeList;
}
//Recursive function to loop through all nodes of tree and return empty LinkedList
// if point not found or NOT Empty with the path to the point, if point is found
private static List <String> getPath(Node root, Point p, List<String> result) {
if(p.getX() >-1 && p.getY() >-1) {
if (root != null) {
result.add(root.getId());
List<Node> childNodes = root.getChildren();
if (childNodes != null && !childNodes.isEmpty()) {
Node child = null;
for (Node node : childNodes) {
(isLeftBoundCondtionMet(node,p) && isTopBoundCondtionMet(node,p)) {
child = node;
}
}
getPath(child, p, result);
}
}
}
return result;
}
public static Boolean isLeftBoundCondtionMet(Node root, Point p) {
return root.getLeft() <= p.getX() && (p.getX() < (root.getLeft() + root.getWidth()));
}
public static Boolean isTopBoundCondtionMet(Node root, Point p) {
return root.getTop() <= p.getY() && (p.getY() < (root.getTop() + root.getHeight()));
}
Это дает мне следующую ошибку
org.junit.ComparisonFailure: Error in output. Unexpected path for point: java.awt.Point[x=32,y=3]
Expected :node/node-1/node-1-6/node-1-6-8/node-1-6-8-4
Actual :node/node-1/node-1-6