我有問題刪除有兩個子樹的節點。當節點有左或右子樹時,我設法刪除節點,但當我嘗試刪除具有兩個子樹的節點時,我得到了分段錯誤。我需要一些幫助。我有一個函數來搜索並返回一個要刪除的節點,並且我有函數從子樹返回最小值。這兩個功能的工作原理刪除有兩個子樹/節點的節點
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
你怎麼只檢查其他 – Archmede
樹的右側是的,我正在使用雙pinter。 find_min函數從假設要刪除的節點的右子樹中找到最小值 –