这是我的面试题,有以下问题陈述
You are given M queries (1 <= M <= 100000) where every query has 2 integers which behave as nodes of some tree. How will you give all the children(subtree) for these 2 nodes respectively.
嗯,我的方法很天真。我对每个查询都使用了整数(节点)的 DFS,但面试官需要一些优化方法。
更简单地说,我们必须打印查询中给出的节点的子树,可能有很多查询,所以我们不能在查询中的每个节点上运行 DFS。
有什么提示可以优化吗?
最佳答案
如果其中一个节点是另一个节点的子节点,您可以优化在两个节点上执行 DFS 的算法。
假设节点 2 是节点 1 的子节点。在这种情况下,在节点 1 上计算 DFS 会得到节点 2 的所有子节点,因此在节点 2 上再次运行 DFS 是低效的。您可以通过存储中间值来避免重新计算来完成此操作(请参阅 dynamic programming,特别是斐波那契的示例,关于您如何不能重新计算递归调用的值)
关于algorithm - 给定一个包含两个整数作为节点的查询,在树中找到这两个节点的所有子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52010187/