2011-11-01 22 views
5
struct Ternary { 

    char current; 
    bool wordend; 
    Ternary* left; 
    Ternary* mid; 
    Ternary* right; 
    Ternary(char c='@',Ternary* l=NULL, Ternary* m=NULL, Ternary* r=NULL,bool end=false) 
    { 
     wordend=end; 
     current=c; 
     left=l; 
     mid=m; 
     right=r; 
    } 
}; 

void add(Ternary* t, string s, int i) { 

    if (t == NULL) { 
     Ternary* temp = new Ternary(s[i],NULL,NULL,NULL,false); 
     t=temp; 
    } 

    if (s[i] < t->current) { 
     add(t->left,s,i); 
    } 
    else if (s[i] > t->current) { 
     add(t->right,s,i); 
    } 
    else 
    { 
     if (i + 1 == s.length()) { 
      t->wordend = true; 
     } 
     else 
     { 
      add(t->mid,s,i+1); 
     } 
    } 
} 

जब मैं add() का उपयोग कर स्ट्रिंग शब्द के अनुक्रम if(t==NULL) खंड के अंदर मुद्रित रहा है लेकिन पेड़ हो रही गठन यानी नोड्स जुड़े हुए नहीं हैं नहीं है हो रही है जोड़ें।त्रिगुट खोजें ट्री

उत्तर

4
t=temp; 

इस लाइन का add() फ़ंक्शन के बाहर कोई प्रभाव नहीं पड़ा है। कॉलर का सूचक अपडेट नहीं किया गया है।

आप वापस जाने के लिए एक Ternary* (यह के अंत में इस मामले में t वापसी) अपने कार्य को बदल सकता है, और करने के लिए कॉल साइटों बदलने के लिए:

Ternary *tree = 0; 
tree = add(tree, "hello", 1); 
tree = add(tree, "bye", 1); 
... 
+0

या ऐड के रूप में तर्क (त्रिगुट ** टी, स्ट्रिंग है, आई इंट) और फिर कर * टी अस्थायी –

+0

के बजाय अस्थायी का उपयोग कर = घोषित, मैं भी निम्नलिखित की कोशिश की कथन टी = नया टर्नरी (एस [i]); और यदि मैं पेड़ का उपयोग करता हूं = ... तो मैं पेड़ के अपने रूट नोड को खो रहा हूं – CoderXX

+0

@ प्रैटिक: 'कोड()' के अंत में 'वापसी टी' को छोड़कर और 'जोड़' का उपयोग करके अपने कोड में कुछ भी बदले बिना जैसा कि मैंने संकेत दिया है, आप कुछ खोना नहीं करेंगे। – Mat

0

बस एक छोटी सी चाल करना होगा:

बदलें:

void add(Ternary* t, string s, int i) 

के साथ:

void add(Ternary*& t, string s, int i) 

कि इस तरह गुजर और फिर उत्पादन पढ़ने से क्लीनर है:

tree = add(tree, "bye", 1); 

जब सी ++ में, आप करने के लिए समारोह हस्ताक्षर बदल जाएगा उनके संदर्भ :) सी में का इस्तेमाल करते हैं:

void add(Ternary** t, string s, int i) 

और प्रासंगिक स्थानों में t को सही करना याद रखें।

खैर, सी ++ स्पष्ट रूप से क्लीनर :) है

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