मैं यह पता लगाने की कोशिश कर रहा हूं कि एक पेड़ नोड में एक फ़ंक्शन को कैसे कार्यान्वित किया जाए जो उसके सभी वंशज पत्तियों (चाहे प्रत्यक्ष या अप्रत्यक्ष) लौटाता हो। हालांकि, मैं एक कंटेनर नहीं पारित करना चाहता हूं जिसमें पत्ती के नोड्स को बार-बार रखा जा सकेगा (पेड़ बड़ा हो सकता है), इसके बजाय मैं पेड़ के माध्यम से फिर से उत्पन्न करने के लिए जनरेटर का उपयोग करना चाहता हूं। मैंने कुछ दृष्टिकोणों की कोशिश की है लेकिन उनमें से कोई भी अब तक काम नहीं कर रहा है। यह एक सबसे करीब मैं एक संभव समाधान करने के लिए आ गया है:जनरेटर का उपयोग कर वृक्ष संरचना के माध्यम से कैसे पुनरावृत्ति करें?
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();
}
}
}
लेकिन यह या तो काम नहीं कर रहा। मैं क्या गलत कर रहा हूं? कॉलिंग की तरह लगता है। यदि समान फ़ंक्शन में उपज स्टेटमेंट होता है तो अनन्य रूप से काम नहीं करेगा।
किसी भी मदद की बहुत सराहना की जाएगी। अग्रिम में धन्यवाद।
संपादित करें: मैं एक शाखा या तो पत्ते या बच्चों के रूप में शाखाओं, इसलिए प्रत्यावर्तन हो सकता है उल्लेख करना भूल गया।
इस एक .NET सवाल नहीं है:
यहाँ एक जनरेटर पर एक प्रयास है जो दोनों क्रम और स्मृति के उपयोग में कुशल है? –
हां - retagged। प्रोग्रामिंग साइट पर 'प्रोग्रामिंग' टैग अनावश्यक है। =) –