Tree building function in Haskell (Homework) -


  डेटा ट्री ए = पत्ता | नोड (ट्री ए) ए (ट्री ए) डेरिविंग (ईक, शो) एफ़ोलट्री :: (बी - & gt; हो सकता है (बी, ए, बी)) - & gt; बी - & gt; पेड़ एक खुला है। बी = मामला एफ बी कुछ भी नहीं - & gt; लीफ बस (एलटी, एक्स, आरटी) - & gt; नोड (unfoldTree f lt) x (unfoldTree f rt)   

ऊपर की जानकारी के दो टुकड़े को देखते हुए, मुझे एक पेड़ के निर्माण कार्य को लागू करने के लिए कहा गया है।

और मेरा प्रयास है <पूर्व> पेड़बिल्ड :: पूर्णांक - & gt; वृक्ष पूर्णांक पेड़बिल्ड 0 = पत्ता वृक्षबिल्ड n = पेड़अनुफाल्ड (\ b - & gt; अगर बी & lt; 2 ^ n-1 तब बस (2 * b, b + 1, 2 * b + 1) और कुछ भी नहीं) 0

बेस केस काम करता है जहां n = 0 काम ठीक होता है लेकिन मुझे पता है कि फ़ंक्शन पूरी तरह से गलत है। क्या कोई मुझे फिर से समझा सकता है कि एक 3-tuple just कैसे काम करेगा? एक सामान्य खुलासा में, बस में पहला तत्व वह तत्व होगा जिसे मैं चाहता हूं और दूसरा तत्व खुलासा जारी रखने के लिए इस्तेमाल किया जाएगा, लेकिन यह 3-ट्यूपल जस्ट में कैसे काम करता है?

उदाहरण के रूप में आउटपुट: पेड़बिल्ड 2 ---- & gt; नोड (नोड लीफ 0 लीफ) 1 (नोड लीफ 2 लीफ)

संपादित करें: मुझे पूरी तरह से यकीन नहीं है कि कैसे बस (2 * b , बी + 1, 2 * बी + 1) जहां बी 0 से शुरू होता है, क्या यह बस (0, 1, 0) हो जाता है? मुझे लगता है कि की परिभाषा को चिपकाते समय आपको एक जगह छोड़ी गई है I

unfoldTree

 unfoldTree fb = के मामले fb ...  

शायद (बी, ए, बी) के बारे में कुछ आंतरिक रूप से सार्थक नहीं है, लेकिन इस विशेष मामले में आप देख सकते हैं कि unfoldTree आइटम को ट्यूपले में lt , x , और rt से जोड़ता है । मध्य कोड x को नोड बनाने के लिए उपयोग किया जाता है, और lt और rt को unfoldTree

अपने उदाहरण आउटपुट को समझाने के लिए, ध्यान दें कि n हमेशा 2 के लिए बाध्य है। treeUnfold के लिए प्रारंभिक 0 तर्क से (\ b - & gt; ...) फ़ंक्शन पहले चेक 0 & lt; 2 ^ एन -1 , फिर पैदावार बस (2 * 0, 0 + 1, 2 * 0 + 1)

मध्यम मूल्य, 0 + 1 आपके पेड़ में रूट नोड का मूल्य है। बाएं उपशीर्षक इसी तरह बनाया गया है b को छोड़कर अभी 2 * 0 है, और सही उपप्रोशन b के रूप में 2 * 0 के साथ बनाया गया है +1


आप का उल्लेख होमवर्क है जिसे 2 ^ n - 1 नोड्स के साथ एक पेड़ का निर्माण करना चाहिए। मैं अनुमान लगा रहा हूँ कि पत्ता मान गिनती नहीं है और आप इन नोड्स को चौथे-पहले क्रम में नंबर देना चाहते हैं, और उम्मीद है कि यह उदाहरण पड़ोस में आपको मिल जाएगा। ऐसा कैसे करें: <पूर्व> पेड़बीलिड :: इंट - & gt; वृक्ष आईटी वृक्षबिल्ड एन = पेड़अनुफाल्ड (\ b - & gt; अगर बी & lt; 2 ^ n - 1 तब बस (2 * b + 1, b, 2 * b + 2) और कुछ भी नहीं) 0

जिस तरह से मैंने इस पर पहुंचा मैं द्विआधारी पेड़ को गहराई 3 के साथ खींचना है। मैंने रूट के साथ शुरू होने वाले नोड्स को 0 के रूप में चिह्नित किया है, बाएं नोड को 1 के रूप में और सही नोड के रूप में 2 । नीचे नोड्स को बायीं से 4 के साथ शुरू से और 7 पर समाप्त होने पर क्रमांकित किया जाता है।

अब पैटर्न दिखाई दे रहा है: यदि वर्तमान नोड का क्रमांकित है b , उसके बाएं और दायें नोड क्रमशः 2 * b + 1 और 2 * b + 2 गिने गए हैं चूंकि 2 ^ n - 1 गहराई के एक वृक्ष में नोड्स की कुल संख्या है n , और मैं चौड़ाई पहले नोड्स में नंबरों की संख्या देता हूं, वापस कुछ नहीं जब b & gt; = 2 ^ n-1 सुनिश्चित करता है कि मैं पेड़ को गहराई तक n भरने के बाद रोक देता हूं।

Comments

Popular posts from this blog

excel vba - How to delete Solver(SOLVER.XLAM) code -

github - Teamcity & Git - PR merge builds - anyway to get HEAD commit hash? -

ios - Replace text in UITextView run slowly -