【发布时间】:2011-08-16 16:49:32
【问题描述】:
已修复:请参阅 EDIT 编辑
我在为 n 叉树编写自己的递归时遇到了麻烦。 @element 是节点的值,@children 是所有连接的下层节点的数组。这是我的方法:
def each
yield(@element)
@children.each { |x|
x.each { |i| yield i}
}
self
end
问题在于它重复了较低的元素。例如,如果我用它来打印一个值为 o 和一个子 c 的节点,它将打印 'occ' 而不是 'oc'。我真的不知道发生了什么,所以我所有尝试的修复都无效。有什么想法吗?
编辑:我认为这可能是因为它以某种方式调用每个节点值除了产生它,所以当它是单个字符的字符串时,它会产生该字符,然后通过 .each 调用再次产生它。
编辑编辑:感谢大家阅读,但我搞砸了。问题不在于此方法,而在于同一类中的另一个 to_s。 to_s 将正确打印,但如果它是一个字符串,则更改父节点的值。每当我测试时,我总是先使用to_s,甚至没有意识到。为此事道歉。 (不能让我回答我自己的问题,因为我是新手)。
【问题讨论】:
-
要在什么类上定义?你应该用类体包围你的代码。
-
您还应该描述如何在 n 叉树实例上定义
@element和@children。 -
该类被省略,因为我认为这是问题区域。我不太确定了...... @element 和 @children 都被传递给构造函数,@element 作为任何对象,@children 作为数组。
-
sawa,要求班上的其他人做到了。我发现了我的问题。此类中的一个单独方法 to_s 会更改树的元素,但会打印出正确的答案。在使用每个之前,我总是对此进行测试,所以我确定每个都是问题。
标签: ruby recursion tree each recursive-descent