Неправильный путь для некоторых точек от узла root до точки в java - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь найти путь от узла 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...