【发布时间】: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)(您不能更快地打印路径)。