查找 2 个树节点之间的路径

Posted

技术标签:

【中文标题】查找 2 个树节点之间的路径【英文标题】:Finding path between 2 tree nodes 【发布时间】:2020-04-07 13:51:49 【问题描述】:

如何打印树中任意 2 个查询节点之间的路径,而不需要二叉树? 我一直在使用 dfs 并将每个查询的路径存储在向量中并打印出来。 但是如果输入查询号。 qq)(可能不确定)复杂度失败。n=树中没有节点。谁能帮我做一些更好的优化时间复杂度降低的可能是 o(nlogq) 或 o(q*logn).n

【问题讨论】:

您可以使用这种技术在O(log n) 中找到最低的共同祖先,例如en.wikipedia.org/wiki/…。所以两个节点之间的路径是从第一个节点到 LCA 的路径加上从第二个节点到 LCA 的反向路径。 这种方法的时间复杂度是多少?告诉 简单地说:你计算两个节点的深度,从较深的节点向上跳直到深度不相等,然后执行二进制搜索:klog(tree depth),如果向上跳 2^k结果节点不相等,否则什么都不做,减少k并重复此步骤。看这里,LCA,方法 4:codeforces.com/blog/entry/16221 这种方法会提高时间复杂度吗? 是的,需要O(log n) 才能知道路径是什么,如果您需要打印路径,也需要O(path length)(您不能更快地打印路径)。 【参考方案1】:

您是否考虑过使用 UCS 或 A* 算法?具有良好启发式的 A* 将允许您访问最少数量的节点

【讨论】:

以上是关于查找 2 个树节点之间的路径的主要内容,如果未能解决你的问题,请参考以下文章

查找两个节点之间路径的 Oracle/过程

在自定义数据结构上查找JavaScript中两个节点之间的路径

数据结构:树

查找 2 个节点之间的街道名称。 OSMnx

使用深度优先搜索查找路径

Q114第一颗二叉查找树(链式)