algorithm - 给定一个包含两个整数作为节点的查询,在树中找到这两个节点的所有子节点?

标签 algorithm tree tree-traversal

这是我的面试题,有以下问题陈述

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/

相关文章:

algorithm - 这个递归算法的大O

c++ - 嵌入式双引号的 CSV 解析

c - 将N个文件按顺序并行拼接成一个的算法

c - Linux 树命令的 C 实现

algorithm - 如何删除具有单个子节点的树节点的子节点

c - 填充二叉树的每个节点中的下一个右指针

php - 加密 MySQL 表中数据的好方法?

algorithm - 通过分配符号来检查一系列整数总和是否为 0 的最有效算法是什么?

php - 使用excel表创建树结构的算法

javascript - 选择html元素的前缀和后缀标签