だから私はバイナリツリーに値を追加する完成したプログラムを持っています。次に、値を事前注文、事後注文、および順番に一覧表示できます。これで、すべてが非常にうまく機能します。ただし、deleteAll
関数を実行するとプログラムが不安定になり、値を追加したり、ツリーを一覧表示したりすると、セグメンテーション違反が発生する可能性があります。何が悪いのか正確にはわかりません。私はまだCに慣れておらず、何が原因であるかを把握できません。それは明らかにdeleteAll
関数にあるので、ここにあります...
void deleteAll(node* *hd){
node* curr = *hd;
if(curr->left != NULL){
deleteAll(&curr->left);
}
if(curr->right != NULL){
deleteAll(&curr->right);
}
free(curr);
}
すべてを削除して任意の順序で一覧表示すると、321294124などの値が表示されます。これは、存在しない場合に指定される値です。だから私はそれは大丈夫だと思います、しかし多分それは問題です。