【发布时间】:2011-12-19 02:10:07
【问题描述】:
假设我们有以下结构:
struct ATree {
string id;
int numof_children;
ATree *children[5];
};
我如何能够搜索一个 id 并输出该 id 的路径?我有办法找出 id 是否在树中,但输出正确的路径是另一回事。我曾尝试使用字符串流,但它似乎无法正常工作(我得到的路径包含不通向我想要的 id 的 id)。注意:假设 id 在树中只能出现一次
这应该使用递归来完成吗?还是可以使用循环来完成?
【问题讨论】:
-
任何递归都可以用循环重写。
-
我建议将访问过的节点存储在
std::vector或std::list中,这就是您下到节点的路径。 -
@littleadv:这是一个比我以前听过的更有力的说法,如果不在其他地方实现堆栈,我认为它是不正确的。
-
@MooingDuck - 计算 101,任何递归解决方案都可以重写为迭代。这是从基本图灵机的等价性得出的。当然,您还需要一些变量。
-
@littleadv:正确,但在许多情况下,迭代必须创建一个堆栈。在这种情况下(如果不考虑 stackoverflow),使用递归通常更简单。