【问题标题】:How to get the path from root to a given node on a arbitrary tree?如何获取从根到任意树上给定节点的路径?
【发布时间】: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


【解决方案1】:

您使用计数器来查找深度是不正确的。在您展示的代码中,您只计算迭代器中的项目。

您需要递归调用您的 path() 方法并将深度值作为该方法的参数传递。并为每个递归调用增加深度值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 2013-04-29
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多