recursion - Recursive non-binary, non-sorted tree search using c# lambas -
वर्ग TreeNode {सार्वजनिक स्ट्रिंग मान {get; सेट;} सार्वजनिक संग्रह & lt; TreeNode & gt; नोड्स {प्राप्त करें; सेट;} सार्वजनिक ट्रीएनोड () {नोड्स = नया संग्रह & lt; वृक्ष नोदा & gt; (); }}
1) आप किसी विशेष मान के साथ ट्रीएनोड वापस करने के लिए पुनरावर्ती लैम्ब्डा अभिव्यक्ति कैसे लिखेंगे (या नल यदि नहीं मिला है) मान मान रहे हैं अद्वितीय? बेशक # 1 # 2 का उपयोग करके उत्तर दिया जा सकता है, लेकिन मैं सोचता हूं कि अगर आपको कोई डुप्लिकेट नहीं है तो एक और अधिक प्रभावी तरीका हो सकता है।
2) मान लें कि मान अद्वितीय नहीं हैं और अब मैचों की एक सूची लौट रहा है इसके बजाय?
संपादित करें : कोड को सही किया, मैंने वास्तव में संकलन किया और कोड के दोनों टुकड़े की जांच करें, लेकिन मैं वीएस में उन्हें तय करने से पहले संस्करणों में चिपकाया होगा। इसके बारे में क्षमा करें।
मैंने कोड के साथ एक रिपॉजिटरी को जोड़ दिया है, यूनिट परीक्षणों सहित, यह सुनिश्चित करने के लिए कि यह अब अपेक्षित रूप से काम करता है, है, उपयोक्ता नाम और पासवर्ड दोनों के साथ 'अतिथि' के रूप में प्रवेश के बिना उद्धरण ।
इस तरह से:
1 : पहले खोजें
Func & lt; TreeNode, String, TreeNode & gt; FindNode = null; // पुनरावर्तन को पुनः उपयोग करें FindNode = (n, value) = & gt; {If (n == शून्य) वापसी n; यदि (n.Value == मान) वापसी n; फोरिकेव (var.NNodes में उपनोड) {TreeNode foundNode = findNode (उपनोड, मान); अगर (foundNode! = Null) लौटा हुआ नोड; } वापसी नल; };
ध्यान दें कि यहां जाल यह है कि लैम्ब्डा या एक प्रतिनिधि को रिकर्सिव होने के लिए, आपको वैल्यूएबल को पहले ज्ञात मूल्य के साथ घोषित करने की आवश्यकता है, इससे पहले कि आप वास्तविक प्रतिनिधि को इसे निर्दिष्ट करें। अन्यथा कंपाइलर शिकायत करेगा कि इससे पहले कि वह एक वैरिएबल का उपयोग कर रहा है।
2 : सभी खोजें
फ़ंक्शन & lt; ट्रीएनोड, स्ट्रिंग, लिस्ट & लेफ्टिनेंट; ट्रीएनोड & gt; & gt; खोजनोड = नल; FindNodes = (n, मान) = & gt; {Var परिणाम = नई सूची & lt; TreeNode & gt; (); यदि (n == शून्य) वापसी परिणाम; यदि (n.Value == मान) परिणाम। जोड़ें (एन); Foreach (var.NNodes में var नोड) {result.AddRange (findNodes (subNode, value)); } वापसी परिणाम; };
चाल केवल यहाँ प्रत्येक स्तर पर नोड्स को इकट्ठा करने के लिए है, और कुल मिलाकर ऊपर।
Comments
Post a Comment