तो इससे पहले कि आप कुछ बुनियादी कंप्यूटर विज्ञान अवधारणाओं को पढ़ें।
- एक द्विआधारी पेड़ एक गतिशील रूप से आवंटित संरचना है (आमतौर पर ऑर्डर किए गए भंडारण के लिए उपयोग किया जाता है)।
- इसकी प्रकृति के कारण बाइनरी पेड़ों का ट्रावेल आमतौर पर पुनरावर्ती होता है;
ऐसा इसलिए होता है क्योंकि लूपिंग के दो रास्ते होने पर लीनियर ट्रैवर्सल (लूप के माध्यम से) स्वाभाविक नहीं है।- पुनरावर्ती: इसका अर्थ है एक फ़ंक्शन जो स्वयं को कॉल करता है।
- पुराने जमाने की भाषाओं में, स्मृति प्रबंधन के लिए मैनुअल मेमोरी प्रबंधन की आवश्यकता होती है।
- मैनुअल: इसका मतलब है कि आपको इसे स्वयं करना होगा।
- जब आप मैनुअल मेमोरी प्रबंधन करते हैं तो आपको वास्तविक रूप से पेड़ के प्रत्येक सदस्य को मुक्त करने के लिए अंतर्निहित प्रणाली से पूछना होगा।
- नि: शुल्क: स्मृति को वैश्विक पियो के लिए पुनर्प्राप्त करें ताकि इसे फिर से उपयोग किया जा सके और आप मेमोरी से बाहर न भागें।
- Freeing: यह फंक्शन को कॉल करके
free()
और इसे उस पॉइंटर को पास करके किया जाता है जिसे आप रिकवर करना चाहते हैं। - सूचक: यह एक आभासी छड़ी की तरह है। अंत में स्मृति है। जब आप मेमोरी मांगते हैं तो आपको एक पॉइंटर (वर्चुअल स्टिक) दिया जाता है जिसमें मेमोरी होती है। जब आप कर रहे हैं आप सूचक (आभासी छड़ी) वापस दे।
पुनरावर्ती समाधान:
freeTree(Node* node)
{
freeTree(node->left);
freeTree(node->right);
free(node);
}
फिर समस्या यह है कि पुनरावृत्ति का अर्थ है कि आप बार-बार एक ही फ़ंक्शन को कॉल कर रहे हैं। इससे स्टैक बढ़ता है। स्टैक बढ़ने से अधिक मेमोरी का उपयोग होता है। जिस कारण से आप पेड़ को मुक्त कर रहे हैं, क्या आप चाहते हैं कि अधिक मेमोरी का उपयोग करके मेमोरी वापस काउंटरप्रोडक्टिव हो (भले ही आप मेमोरी के दोनों बिट्स प्राप्त करें)।
आखिरी सवाल पर:
एसओ समस्या केंद्रों को पुनरावर्ती संस्करण को एक रैखिक समाधान में परिवर्तित करने के लिए (ताकि आपको मेमोरी का उपयोग न करना पड़े)।
नोड प्रकार दें
typedef struct Node Node;
struct Node
{
Node* left;
Node* right;
};
इन नोड्स के एक पेड़ को मुक्त करने के लिए एक फ़ंक्शन लिखें।
प्रतिबंध:
- पुनरावृत्ति का उपयोग नहीं कर सकते (अप्रत्यक्ष रूप से भी नहीं)
ट्रैकिंग के लिए किसी भी गतिशील स्थान को आवंटित नहीं किया जा सकता है।
नोट O (n) समाधान है
विजेता:
- सबसे अच्छी जटिलता।
- टाई तोड़ 1: पहले प्रस्तुत किया
- टाई ब्रेक 2: पात्रों की कम से कम राशि।