2つのサブツリーを持つノードを削除する際に問題があります。私はノードが左または右のサブツリーを持っているときにノードを削除することができましたが、私は2つのサブツリーを持つノードを削除しようとしたときにセグメンテーションフォールトを取得しました。助けが必要です。私は、削除するノードを検索して返す関数を持っていて、サブツリーから関数の戻り値の最小値を持っています。どちらの関数も2つのサブツリー/ノードを持つノードを削除する
bool tree_delete(tree_t *t, void *key){
node_t **find = findNode(t, key);
if(*find != NULL){
if((*find) -> left == NULL && (*find) -> right == NULL){
free(*find);
return true;
}
else if ((*find) -> left != NULL && (*find) -> right == NULL){
node_t *temp = *find;
*find = (*find) -> left ;
free(temp);
return true;
}
else if ((*find)-> left == NULL && (*find) -> right !=NULL){
node_t *temp = *find;
*find = (*find) -> right;
free(temp);
return true;
}
else{
// problem in this part of the code
node_t **min = find_min(&(*find) -> right);
*find = *min;
free(*min);
return true;
}
}
}
私はこのような私のコードを更新し、まだ取得してきた作品セグメンテーション違反 - ここ
node_t *temp = *find;
node_t **min = find_min(&(*find)-> right);
(*min) ->right = (*find)->right;
(*min) ->left = (*find)->left;
*find = *min;
free(temp);
node_t **min2 = find_min(&(*find) -> right);
free(*min2);
*min2 = NULL;
return true;
は、なぜあなたは二重のポインタ( 'node_t ** find')間接参照を使用していない配置する必要があります('(*見つけますか。) ')? – CristiFati
どうすればelseのツリーの右側をチェックするだけですか – Archmede
はい、私はダブル・ピンターを使用しています。 find_min関数削除すると思われるノードの右側のサブツリーから最小値を見つける –