Я вставил узел и удалил дерево с помощью учебника. Я тестирую его, и он работает нормально. Однако я не могу понять, почему мне нужно передать по ссылке корень в вставке, а в deleteAll только указатель. Потому что я думаю, что передача только указателя является ссылкой на значение, а затем каждое изменение видно только в функции.
typedef struct node{
int element;
struct node *left;
struct node *right;
}*tTree;
void insert(tTree *myTree, int element){
if(*myTree == NULL){
myTree= (tTree)malloc(sizeof(*myTree));
myTree->element = element;
myTree->left = NULL;
myTree->right = NULL;
}
else{
int treeElement = (*myTree)->element;
if( treeElement > element){
insert(&(*myTree)->left, element);
}
else{
insert(&(*myTree)->right, element);
}
}
}
void deleteAll(tTree myTree){
if(myTree != NULL){
deleteAll(myTree->right);
deleteAll(myTree->left);
free(myTree);
}
}
int size(tTree myTree){
if (myTree != NULL){
return 1 + size(myTree->right) + size(myTree->left);
}
else
return 0;
}
int main(){
tTree root = NULL;
insert(&root,3);
insert(&root,2);
insert(&root,4);
insert(&root,1);
printf("Number of nodes: %d\n",size(root));
deleteAll(root);
root = NULL;
printf("Number of nodes: %d\n",size(root));
return 1;
}
myTree= (tTree)malloc(sizeof(*myTree));
здесь вас смутил собственный типизированный указатель. (с обеих сторон отсутствует уровень косвенности) - person wildplasser   schedule 28.07.2015new
в качестве имени переменной казалась правильной. Приведение указателя приносит больше вреда, чем пользы. - person wildplasser   schedule 28.07.2015