Bäume und Zeiger in C?
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int key;
struct TreeNode* left;
struct TreeNode* right;
};
struct TreeNode* createNode(int key) {
struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
newNode->key = key;
newNode->left = newNode->right = NULL;
return newNode;
}
int main()
{
struct TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
// Weitere Operationen können hier durchgeführt werden
return 0;
}
Diesen Code habe ich von ChatGPT. Ich verstehe folgende Zeile nicht:
struct TreeNode* createNode(int key)
Verstehe ich richtig, dass createNode einen Zeiger auf TreeNode bildet und somit Zugriff auf dessen Speicher das. Wenn ja, hat er dann auch Zugriff auf den Speicherinhalt, also was da drin steht? Wenn dies auch der Fall ist was genau bringt es mir hier?
2 Antworten
WennDu Dir die typische graphische Darstellugn eines Baumes vorstellst, dann gibt es Kanten vom Elternknoten auf die Kindknoten.
Ein Pointer ist ein Referenztyp, er beinhaltet die Speicheradresse des referenzierten Objektes.
Diese Referenzen für die Nachfolger entsprechen den Kanten der graphischen Darstellung.
Ich muß dann im Endeffekt die Referenz nur noch dereferenzieren, um auf das Zielobjekt zuzugreifen, beachte hierbei, daß
(*node).member /+ ist äquivalent zu */
node->member
Die Funktion createNode legt einen neuen Knoten an, welcher sich einen Wert (key) merkt und gibt ihn (bzw. einen Zeiger darauf) zurück.
Über den Zeiger hast du auch Zugriff auf die Eigenschaften des Knoten (key, left, right).
Wie du in der main-Funktion siehst, kann durch den Zugriff auf die Eigenschaften die Verknüpfung der einzelnen Knoten erfolgen. Zuerst wird ein Wurzelknoten (root) kreiert. Anschließend werden zwei weitere Knoten angelegt und mit ihm verbunden (left, right).