【发布时间】:2016-10-21 20:14:03
【问题描述】:
我有这棵树:
Harry(root)
Jane
Joe
Diane
George
Jill
Carol
Mary
Mark
Bill
Grace
我已经扩展了this page中的代码
这个函数使用了深度优先搜索。
public static int path(Tree t, String root, String n)
{
// Default traversal strategy is 'depth-first'
int counter = 0;
Iterator<Node> depthIterator = t.iterator(root);
while (depthIterator.hasNext()) {
Node node = depthIterator.next();
if(node.getIdentifier().compareTo(n)==0)
{
System.out.println("Distance from " + root +" to " + n + " " + counter);
return counter;
}
counter++;
System.out.println(node.getIdentifier());
}
return 0;
}
我的最终目标是找到根节点和给定节点之间的路径长度。当我运行这个函数时,到 root 和 Joe 的距离,以及到 root 和 Diane(它们是兄弟姐妹)的距离是不同的,因为它计算了深度优先搜索的步骤。 这种方法是错误的还是可以解决的?
【问题讨论】:
-
使用深度优先搜索的Iterator对你来说重要吗?我认为迭代器可能有问题,因为他在树中跳跃(例如,您可能处于 5 的深度,并且下一个节点是根的子节点(深度 1))。我认为编写自己的深度优先搜索(包括深度计数)比使用现有的迭代器更容易。
-
如果你知道节点,你不能把它推入堆栈然后去它的父级并推入堆栈直到你在根,然后弹出整个堆栈并获得路径你想要吗?
-
@VenomFangs Node 类似乎没有父级(节点不知道他们的父级)。他们只认识自己的孩子。
-
即使不使用深度优先搜索也能返回节点深度的函数呢?
-
@user840718,当你添加节点时,如果你有对父节点的引用,你可以拉它的深度并添加一个。如果您对每次添加都这样做,那么您将在需要时获得所需的深度。
标签: java tree depth-first-search