0

Leaf と BinaryNode の 2 つのクラスがあります Leaf には、文字列である 1 つのフィールドが含まれます BinaryNode には、両方とも Leaf または BinaryNode のいずれかである 2 つの子が含まれます

ツリー内のすべての単語の文字列を左から右に返す 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

メソッドの戻り値は、最後に実行された式の値です。明示的な戻り値がなければ、最後に見つかった文字列を取得するだけです。

の前に 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 に答える