私はテンプレート付きのbstクラスを作成しましたが、私はGetEnumeratorを実装しましたが、実際に何が行われたかに満足していません。再帰での収量
ので、最初私はヘルパー関数に、内側の訪問
private IEnumerable<Node<T>> innerVisit(Node<T> root)
{
if(root== null)
yield break;
if (root.Left != null)
{
var l = innerVisit(root.Left);
foreach (var item in l)
yield return item;
}
yield return root;
if (root.Right != null)
{
var r = innerVisit(root.Right);
foreach (var item in r)
yield return item;
}
}
を必要と感じたすべての私は本当に繰り返しコードを嫌いますが、それ への適切な解決策を見つけることができませんでした、明確にループを繰り返すことは不浄であるだけでなく、私は、これに飛びつくような機能の下にそれを埋め込むと、それほど言わないことは悪い習慣になると感じています。どのようにこれを正しく行うための提案?
私がいないなど
これが効果的にOPが書いたのと同じコード、ちょうど今ワンライナーです。あなたは、OPの懸案事項に対処していません。最初にやっていたことを効果的に行う構文を効果的に提示しました。 – Enigmativity
"繰り返しコードが嫌いですが、適切な解決策を見つけることができませんでした"と、このコードはすべての歩留まりとforeachループを繰り返すわけではありません。彼はちょうど同じforeachを繰り返さず、場所全体にコードを生成したくない別のアルゴリズムを求めなかった。 – YuvShap
'InnerVisit'を呼び出すたびに、それが要素であれば' yield'を呼び出すことになります。これはOPのコードと同じ回数だけ実行されます。そして、あなたは左に 'InnerVisit'を、右に' InnerVisit'を呼んでいます - これはコードの繰り返しです。これは効果的にOPと同じコードです。あなたはあなたのソリューションがどのように異なっているか説明しようとするべきです。 – Enigmativity