查找 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 的反向路径。
这种方法的时间复杂度是多少?告诉
简单地说:你计算两个节点的深度,从较深的节点向上跳直到深度不相等,然后执行二进制搜索:k
是 log(tree depth)
,如果向上跳 2^k
结果节点不相等,否则什么都不做,减少k
并重复此步骤。看这里,LCA,方法 4:codeforces.com/blog/entry/16221
这种方法会提高时间复杂度吗?
是的,需要O(log n)
才能知道路径是什么,如果您需要打印路径,也需要O(path length)
(您不能更快地打印路径)。
【参考方案1】:
您是否考虑过使用 UCS 或 A* 算法?具有良好启发式的 A* 将允许您访问最少数量的节点
【讨论】:
以上是关于查找 2 个树节点之间的路径的主要内容,如果未能解决你的问题,请参考以下文章