0

我有两个类 Leaf 和 BinaryNode Leaf 包含一个字段,它是一个字符串 BinaryNode 包含两个孩子,它们都是 Leaf 或 BinaryNode

我正在尝试编写一个 concatAll 方法,它将从左到右返回树中所有单词的字符串...

以下是我到目前为止的内容,但它只返回它找到的最后一个字符串,而不是已构建的整个字符串......怎么会?

def concatAll
 final = ""

 if @lchild.respond_to?('string')   
   final += @lchild.to_s
 else
   @lchild.concatAll unless @lchild.nil?
 end

 if @rchild.respond_to?('string')   
   final +=  @rchild.to_s
 else
   @rchild.concatAll unless @rchild.nil?
 end
end
4

2 回答 2

1

方法的返回值是最后执行的表达式的值。如果没有明确的返回值,您只会得到最后一个找到的字符串。

您可以简单地在 : 之前添加一行end

  final
end

这将返回final.

于 2012-11-01T00:29:10.707 回答
1

我发现当递归调用返回树时,我需要 final += 。

def concatAll
 final = ""

 if @lchild.respond_to?('string')   
    final += @lchild.to_s
 else
   final += @lchild.concatAll unless @lchild.nil?
 end

 if @rchild.respond_to?('string')   
   final +=  @rchild.to_s
 else
   final += @rchild.concatAll unless @rchild.nil?
 end

 final
end

特别感谢马克托马斯

于 2012-11-01T00:57:44.437 回答