2016-05-03 6 views
-4

Ich habe zwei Strukturen, die einen Knoten eines binären Suchbaums und eine BST darstellen. Aufruf der Add-Methode beim ersten Mal die Ausgabe ist wie erwartet: tree is null, aber warum ist es immer noch: tree is null nachdem ich es das zweite Mal anrufe?Struktur Mitglied Zeiger immer noch Null nach dem Zuweisen von Speicher

Wenn ich als Parameter an die Methode add die ganze bst senden, funktioniert es.

#include <iostream> 

using namespace std; 

struct node 
{ 
    int data; 
    node* right = NULL; 
    node* left = NULL; 
}; 

struct bst 
{ 
    node* root = NULL; 
}; 



void add(node* tree) 
{ 

    if (tree == NULL) 
    { 
     cout << "Tree is NULL "<<endl; 
     tree = new node; 
    } 
    else cout << "Not NULL"<<endl; 
} 

int main() 
{ 
    bst* tree = new bst; 
    add(tree->root); 
    add(tree->root); 
    system("pause"); 
    return 0; 

} 
+1

Dies ist nicht C. Und in C++, sollten Sie Verwenden Sie nicht das Makro 'NULL', sondern das Schlüsselwort' nullptr'. – Olaf

+1

Sie übergeben 'Baum' Zeiger nicht als Referenz, arbeiten an einem Duplikat ... – LogicStuff

+0

Sie übergeben den Zeiger von Wert – user463035818

Antwort

0

Sie übergeben den Knoten selbst statt seiner Adresse. Versuchen

void add(node** tree) 
{ 
    if (*tree == NULL) 
    { 
     cout << "Tree is NULL "<<endl; 
     *tree = new node; 
    } 
    else cout << "Not NULL"<<endl; 
} 

int main() 
{ 
    bst* tree = new bst; 
    add(&(tree->root)); 
    add(&(tree->root)); 
    system("pause"); 
    return 0; 
} 
+0

Er ist tatsächlich die Adresse des Knotens übergeben . – user463035818

1

Sie nicht Baum wieder aus der Funktion übergeben können, wenn Sie es als die Adresse des Zeigers wie folgt erklären:

void add(node** tree) { 
     if (tree == NULL) { 
      return; 
     } 
     if (*tree == NULL) { 
      cout << "Tree is NULL " << endl; 
      *tree = new node; 
     } else { 
      cout << "Not NULL" << endl; 
     }  
    } 
Verwandte Themen