Einige C++ - Programmierer sagen, dass die dynamische Speicherzuweisung schlecht ist und wann immer möglich vermieden werden sollte. Ich habe versucht, eine binäre Baumdatenstruktur ohne Verwendung der dynamischen Speicherzuweisung zu erstellen, und es funktioniert nicht. Hier ist, was ich versucht:Wie erstellen Sie einen zeigerbasierten Binärbaum, ohne die dynamische Speicherzuweisung zu verwenden?
struct BTNode {
BTNode *left = 0, *right = 0;
int data;
BTNode(int d_) { data = d_; }
void insert(int d_) {
BTNode n(d_);
if (d_ <= data)
if (left == 0) left = &n;
else left->insert(d_);
else
if (right == 0) right = &n;
else right->insert(d_);
}
}
Und dann diese in Haupt tun ...
BTNode root(8);
root.insert(9);
root.insert(10);
cout << root.right->right->data;
führt zu einer segfault, weil die BTnode die Daten enthalten, den Gültigkeitsbereich ging vor langer Zeit.
Meine Frage ist, wie soll man einen Zeiger-basierten Binärbaum so ohne die Verwendung von new
und delete
strukturieren?
Verwenden Sie Werte anstelle von Zeigern – user4759923
Sie können ein Array von 'BTNode' mit ausreichenden Elementen erstellen und es als Speicherpool verwenden, indem Sie Knoten aus dem Array entnehmen. – MikeCAT
Sie könnten einen 'std :: vector' erstellen, um alle Knoten zu halten. Ich persönlich glaube nicht, dass das notwendig ist. Ich würde einfach 'auto newNode = new BTNode (8);' und dann die entsprechenden Zeiger setzen. –