2012-02-21 18 views
5

के बजाय डबल पॉइंटर का उपयोग मैं एक बाइनरी खोज पेड़ पर काम कर रहा हूं।सिंगल पॉइंटर

typedef struct TreeNode 
{ 
int num; 
struct TreeNode *left,*right; 
}TREENODE; 

पेड़ में एक नोड सम्मिलित करने के लिए मैं विधि signatire

void InsertNode(TREENODE **root,int data); 

निम्नलिखित है उपरोक्त विधि में हम क्यों करते हैं:

तो, यहाँ नोड का प्रतिनिधित्व करने के लिए इस्तेमाल किया संरचना है डबल पॉइंटर की आवश्यकता है। हम एक सूचक का उपयोग कर सकते हैं!

क्या हम डुप्लिकेशंस से बचने के लिए डबल पॉइंटर का उपयोग कर रहे हैं?

+0

ध्वनि संदेह से होमवर्क की तरह ... – Nick

+0

@Nick यह है, लेकिन सवाल यह सही है। – Andrey

+0

मैं इसे – Nick

उत्तर

7

नहीं, पुनर्वितरण के मामले में इसकी आवश्यकता है। पुनर्विक्रय रूट के बाद बदला जा सकता है।

ठीक है, मैं विस्तार करूँगा। डबल पॉइंटर आपको पॉइंटर को संशोधित करने की अनुमति देता है। तो आपके मामले में पेड़ की जड़ क्या है? सूचक TREENODE पर। खोज जैसे कुछ ऑपरेशन इसे कभी संशोधित नहीं करेंगे। लेकिन कुछ परिचालन को बदलने की जरूरत है, ताकि एक और नोड नई जड़ बन जाए। इसलिए उन्हें उस चर के उपयोग की आवश्यकता है जिसे आप रूट के रूप में उपयोग करते हैं। एक उदाहरण क्यों उन्हें इसकी आवश्यकता हो सकती है पुनर्वितरण है, AVL trees देखें।

+2

यह। जब आप एक पॉइंटर का उपयोग करते हैं, तो रूट नोड हमेशा आपके द्वारा दिए गए नोड को इंगित करता है। लेकिन जब कुछ संतुलन से, रूट नोड बदलता है, तो रूट के लिए आपके पॉइंटर को भी बदलने की जरूरत होती है। Thats क्यों आपको एक सूचक के लिए एक सूचक की जरूरत है। (रूट न केवल एक इनपुट वैरिएबल है बल्कि एक आउटपुट व्यवहार्य भी है) – Hayt

+1

@ हैट एंड्री इसे मिला ... thxxx ... आप लोग प्रतिभा ... – Anirudha

+0

यह आवश्यक नहीं है "rebalancing"। किसने कहा कि वहाँ कोई पुनर्विक्रय लागू किया गया है? यह केवल तथ्य हो सकता है कि एक खाली पेड़ में पहला सम्मिलन रूट को शून्य सूचक से गैर-शून्य सूचक में बदल देगा। – AnT

2

यदि हम को डबल पॉइंटर की आवश्यकता है, तो हमें पॉइंटर को संशोधित करने की आवश्यकता है।

0

यह इस बात पर निर्भर करता है कि आप पेड़ का उपयोग कैसे करते हैं। अगर पेड़ को किसी प्रकार की सॉर्टिंग पर रखना चाहिए, तो सम्मिलन रूट नोड को बदल सकता है, इसलिए आपको डबल पॉइंटर की आवश्यकता है।

+0

हाँ .. एक सॉर्ट पेड़ .. – Anirudha

2

नहीं - आप एक डबल पॉइंट का उपयोग कर रहे हैं ताकि आप एक पॉइंटर संशोधित कर सकें।

0

"डबल पॉइंटर्स" का उपयोग आपको स्मृति की सामग्री को बदलने की अनुमति देता है जो <some_class>* का पता रखता है। तो, हम मूल रूप से फ़ंक्शन कॉल के बाहर मेमोरी लोकेशन की स्थिति को संरक्षित कर रहे हैं। एक और उपयोग उदाहरण के लिए जैसा है char*, और (स्ट्रिंग की सरणी रूप) char**

आप किसी अन्य सूत्र में मेरा जवाब मिल सकता है (स्ट्रिंग के रूप में): Why use double pointer? or Why use pointers to pointers?

संबंधित मुद्दे