Ich arbeite an einer C-binären Suchbaumbibliothek und ich versuche, eine Funktion zu schreiben, die den linken Knoten des Baumunterbaums löschen wird. Hier ist die Struktur von meinem Baum:Löschen Sie den linken Teilbaumknoten (binäre Suchbaum) in C
struct Node {
int value;
struct Node *left;
struct Node *right;
};
typedef struct Node TNode;
typedef struct Node *binary_tree;
Der Baum wie folgt erstellt:
binary_tree NewBinaryTree(int value_root) {
binary_tree newRoot = malloc(sizeof(TNode));
if (newRoot) {
newRoot->value = value_root;
newRoot->left = NULL;
newRoot->right = NULL;
}
return newRoot;
}
Hinzufügen Element, um es:
void Insert(binary_tree *tree, int val) {
if (*tree == NULL) {
*tree = (binary_tree)malloc(sizeof(TNode));
(*tree)->value = val;
(*tree)->left = NULL;
(*tree)->right = NULL;
} else {
if (val < (*tree)->value) {
Insert(&(*tree)->left, val);
} else {
Insert(&(*tree)->right, val);
}
}
}
Die delleftsubtreenode ich getan habe:
void delleftsubtree(binary_tree *tree){
if((*tree)->value!=NULL)
{
free(&(*tree)->left);
delleftsubtree(&(*tree)->left);
}
else
{
printf("end");
}
}
Diese Methode kompilieren jedoch w Wenn ich versuche, es das Programm nur Crash nennen. Ich verstehe nicht, warum oder wie sonst diese Funktion zu tun.
danke!
Es gibt eine Reihe von Problemen mit Ihrem Code, die damit beginnen, 'binary_tree *' Werte anstelle von 'binary_tree' zu übergeben. Sie testen auch eine ganze Zahl mit 'NULL' und Sie löschen einen Baumknoten, bevor Sie ihn erneut eingeben. – paddy
** Niemals * 'typedef' Zeiger! Sie sehen bereits die negativen Auswirkungen dieses Fehlverhaltens. – Olaf