我正在尝试修复我的方法,我应该采用用户输入节点,然后显示从用户输入到目标节点所需的移动。在该方法中,answer代表目标节点。所以我的方法是,虽然答案有一个父级,但您显示它,然后继续这种方式,但我的方法没有按预期工作。
例如,如果答案(目标)是 7 并且用户输入了 5,我希望此方法先说 6,然后是 7,因为这些是从输入到实现目标所采取的步骤。然而我的方法打印出 6 然后 5。它将得到第一步,然后回溯到我的输入。我确信这是指针的问题,但我似乎无法弄清楚。
while(answer.getParent() != null){
System.out.print(answer.getParent());
answer = answer.getParent();
最佳答案
您可以使用堆栈,可以是您定义的堆栈,也可以是调用堆栈。要使用调用堆栈,您需要递归地编写代码。使用用户定义的stack ,你会做类似的事情
Deque<String> steps = new ArrayDeque<>();
while (answer.getParent() != null) {
steps.addFirst(answer.toString());
answer = answer.getParent();
}
while (!steps.isEmpty()) {
System.out.println(steps.removeFirst());
}
您还可以使堆栈与 answer.getParent()
返回的类型相同,并省略 toString
。但我不知道类型,所以我没有尝试这样做。
递归方法看起来像
public void displayPath(Node answer) {
if (answer.getParent() == null) {
return;
}
displayPath(answer.getParent());
System.out.println(answer);
}
我将该类型称为Node
。这可能是错误的,因为我不知道正确的类型是什么。我只是猜测。根据需要更换。
请注意,您必须在递归调用之后进行输出,以便在返回调用堆栈时打印它。如果你把它放在前面,它将以相反的顺序打印。
简而言之,您的代码以相反的顺序生成列表。所以你必须以相反的顺序显示。我认为在这里谈论指针会使问题变得困惑。你正在从 child 攀登到 parent 。所以你的输出首先是 child ,然后是 parent 。但是,如果您的节点可以有多个子节点,则必须将子节点爬到父节点。或者您最终会搜索整个树,但仍然需要存储您的路径。
关于java - 正确设置指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54610761/