Algorithm 给定一个包含两个整数作为节点的查询,在树中查找这两个节点的所有子节点?
这是我的面试问题,问题陈述如下Algorithm 给定一个包含两个整数作为节点的查询,在树中查找这两个节点的所有子节点?,algorithm,tree,tree-traversal,Algorithm,Tree,Tree Traversal,这是我的面试问题,问题陈述如下 给您M个查询(1如果其中一个节点是另一个节点的子节点,您可以优化在两个节点上执行DFS的算法 假设节点2是节点1的子节点。在这种情况下,计算节点1上的DFS将获得节点2的所有子节点,因此在节点2上再次运行DFS是低效的。可以通过存储中间值来实现这一点,以避免重新计算(请参阅Fibonacci的示例,特别是关于如何不能重新计算递归调用的值)对于单个查询,DFS应该是最佳方式。对于大量查询,我认为您可以做以下几件事: 缓存结果。当一个数字频繁出现(比如100次)时,将
给您M个查询(1如果其中一个节点是另一个节点的子节点,您可以优化在两个节点上执行DFS的算法
假设节点2是节点1的子节点。在这种情况下,计算节点1上的DFS将获得节点2的所有子节点,因此在节点2上再次运行DFS是低效的。可以通过存储中间值来实现这一点,以避免重新计算(请参阅Fibonacci的示例,特别是关于如何不能重新计算递归调用的值)对于单个查询,DFS应该是最佳方式。对于大量查询,我认为您可以做以下几件事:
希望这有帮助!你专门为它设计了什么算法?你能放一些代码或伪代码吗?查找或计数?还有,这两个节点的子节点是什么?两个集的交集?@K.Dackow我只是对每个有2个整数或节点的查询使用简单DFS,并对每个查询运行DFS,收集其子树。@juvian,它的simp两个节点都有一个完整的子树。所以它与单个节点的2*M查询相同?我不明白为什么会给出2。如果需要为每个查询提供整个子树作为答案,dfs是最优的