c で {a, b, c, d} みたいな入力に対して、 (((a b) c) d) とか ((a b) (c d)) みたいな2分木を全部書き出すプログラムを書きたいのですが、 どうするのがうまいのかよく分かりません。 list[]={a, b, c, d} として配列に入れたあと、ここから 2個とって、 例えば a と b を取ると、 (a b), c, d の4つに対して 再帰的に木を構築するのが自然かと思います。 ただ、配列に入れてしまっていると、新しい配列を作らないと いけなくなりますよね。 どうも毎回作り直すのは効率がよくない気がするのですよね。 よい方法があればおしえていただけないでしょうか。