concatAll在Ruby树上

时间:2012-10-31 23:04:01

标签: ruby string tree

我有两个课程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

2 个答案:

答案 0 :(得分:1)

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

您只需在end之前添加一行:

  final
end

这将返回final的值。

答案 1 :(得分:1)

我想出来,当它回到树上时,我需要在递归调用前面的最终+ =。

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

特别感谢Mark Thomas