#include<iostream>
using namespace std;
class Node{
    public:
        Node *lch,*rch;
        char data;
        Node(char data){
             this->data=data;
             this->lch=nullptr;
             this->rch=nullptr;
       }
};

class Tree{
    private:
        Node *root;
    public:
        Tree(){
            root=nullptr;
        }
        void Road(char p,Node *T=root);

    public:
        void init(Node* &T=root){
            char data;
            cin>>data;
            if(data!='#'){
                T=new Node(data);
                init(T->lch);
                init(T->rch);
            }
        }
};
void Tree::Road(char p,Node *T){
    if(!T) return;
    Road(p,T->lch);
    Road(p,T->rch);
    if(T->data==p){
        cout<<T->data<<"\t";
        p=T->data;
    }
}

int main(){
    Tree T;
    T.init();
    T.Road('A');
    return 0;
}

कक्षा वृक्ष में, यदि मैं "स्थिर नोड * रूट" का उपयोग करता हूं, तो यह अच्छी तरह से काम करेगा। तो मुझे "स्थैतिक" क्यों जोड़ना चाहिए? और जब मैंने "स्थिर नोड * रूट" का उपयोग किया, तो मुझे एक नई त्रुटि मिली कि " test.cpp :(.rdata$.refptr._ZN4Tree4rootE[.refptr._ZN4Tree4rootE]+0x0): 'ट्री :: रूट' के लिए अपरिभाषित संदर्भ "

0
Mr.zhao 13 नवम्बर 2020, 14:14

1 उत्तर

सबसे बढ़िया उत्तर

डिफ़ॉल्ट तर्क में Node *T=root अवैध है क्योंकि डिफ़ॉल्ट तर्कों की this तक पहुंच नहीं है। आप इसके बजाय दो ओवरलोड का उपयोग कर सकते हैं, एक Node* पैरामीटर के साथ और दूसरा बिना।

void Road(char p) { Road(p, root); }
void Road(char p, Node* T);
0
n. 'pronouns' m. 13 नवम्बर 2020, 14:47