Bir ağaç düğümündeki tüm işlevlerini (doğrudan veya dolaylı olarak) döndüren bir işlevde nasıl işleneceğini anlamaya çalışıyorum. Bununla birlikte, yaprak düğümlerinin tekrarlı olarak yerleştirileceği bir kaptan (ağaç büyük olabilir) geçmek istemiyorum, bunun yerine ağaç boyunca yinelemek için bir jeneratörü kullanmak istiyorum. Birkaç yaklaşım denedim ama hiçbiri şu ana kadar işe yaramadı. Bu mümkün olan en yakın çözümdür:Jeneratör kullanarak bir ağaç yapısında yineleme nasıl yapılır?
public interface ITreeNode
{
IEnumerable<ITreeNode> EnumerateLeaves();
}
class Leaf : ITreeNode
{
public IEnumerable<ITreeNode> EnumerateLeaves()
{
throw new NotImplementedException();
}
}
class Branch : ITreeNode
{
private List<ITreeNode> m_treeNodes = new List<ITreeNode>();
public IEnumerable<ITreeNode> EnumerateLeaves()
{
foreach(var node in m_treeNodes)
{
if(node is Leaf)
yield return node;
else
node.EnumerateLeaves();
}
}
}
Fakat bu da çalışmıyor. Neyi yanlış yapıyorum? Aynı işlevde bir getiri ifadesi varsa Yinelenen aramalar gibi görünür.
Herhangi bir yardım çok takdir edilecektir. Şimdiden teşekkürler.
Düzenleme: Bir dalın çocuk olarak yaprak veya dallara sahip olabileceğinden bahsetmeyi unuttum, bu nedenle özyineleme. İşte
bu bir .NET soru değil mi: İşte
hem çalışma zamanı ve bellek kullanımında verimli olan bir jeneratör de bir girişimdir? –Evet - yeniden etiketlendi. 'Programlama' etiketi bir programlama sitesinde gereksizdir. =) –