Binärbaum komplett löschen



  • Hallo,
    ich habe mit c++ angefangen und dazu folgendes probiert:

    ich habe einen Binärbaum aufgebaut, der folgende Struktur hat:

    struct node{
        char content;
        node* left;
        node* right;
        //node* parent;
    };
    

    Die Methode zum Löschen des vollständigen Baums sieht folgendermaßen aus:

    void deleteNode(node  *node){
    	if(node == NULL)return;
    	if(node->left==NULL && node->right==NULL){
    		delete node;
    		node=NULL;
    		return;
    	}
    	if(node->left !=NULL)
    		deleteNode(node->left);
    	if(node->right !=NULL)
    		deleteNode(node->right);
    }
    

    Wenn ich deleteNode(root) aufrufe, wobei root ein Pointer ist ( node* root )mit dem Anfangsknoten, dann ist am Ende jedoch mein root-Knoten nicht NULL sondern, da steht immer noch was drinne.
    Was mache ich falsch?

    Vielen Dank



  • Du übergibst den Parameter-Zeiger by value, d.h. die Funktion arbeitet mit einer Kopie.



  • ok,
    wir hatten noch referenzübergaben mit
    void funktion(int &num){};

    sowas scheint aber nicht zu gehen:
    void deleteNode(node& *node){};

    Da kommt folgende Fehlermeldung:
    error: cannot declare pointer to `struct node&'
    wieso geht das net?

    wie mache ich das richtig? Mit nem pointerpointer`?
    so: void deleteNode(node** anode){}?
    wie ruft man dann die deleteNode funktion auf? ich habe ja keinen pointerpointer?
    Ich habe es jetzt nochmal zu probiert:

    void deleteNode(node **node){
    	if(*node == NULL)return;
    	if((*node)->left==NULL && (*node)->right==NULL){
    		delete *node;
    		*node=NULL;
    		return;
    	}
    	if((*node)->left !=NULL)
    		deleteNode(&((*node)->left));
    	if((*node)->right !=NULL)
    		deleteNode(&((*node)->right));
    }
    

    Es wird immer noch nicht richtig gelöscht :S



  • invoices schrieb:

    sowas scheint aber nicht zu gehen:
    void deleteNode(node& *node){};

    Andersrum:

    void deleteNode(node*& node)
    

    Der Stern gehört zum Typ.



  • ok danke,
    leider wird mein baum immer noch nicht richtig gelöscht.
    stimmt vielleicht was sonst noch nicht?

    void deleteNode(node*&node){
    	if(node == NULL)return;
    	if(node->left==NULL && node->right==NULL){
    		delete node;
    		node=NULL;
    		return;
    	}
    	if(node->left !=NULL)
    		deleteNode(node->left);
    	if(node->right !=NULL)
    		deleteNode(node->right);
    }
    


  • Nur zur Info, das ist das falsche Forum. Es gehört ins C++ Forum.



  • ok tut mir leid,vielleicht kann das jemand mal verschieben.

    aber das problem hat sich nun erledigt.
    die Reihenfolge der IF-Abfrage hat nicht gestimmt.


Anmelden zum Antworten