以下のコードでは、を削除して、の操作を実装しようとしました。しかし、複雑な削除部分を開始する前に、リーフノードを削除できませんでした。変数がどこに定義されているのかは関係ありますが、解決することはできません。任意のアイデアをいただければ幸いです。バイナリ検索ツリーからノードを削除する
ノードを削除したい部分は、基本的にdelete temp;
部分として実装されています(ちなみに、私はdelete[]temp;
として挿入してもまだ動作しません)。
void remove(int value){
if(root==NULL)
cout<<"The list is empty!"<<endl;
else {
Node *temp=root;
while(temp!=NULL)
{
cout<<"Processing: "<<temp->data<<endl;
if(value==temp->data)
{
cout<<"Data verified"<<endl;
//DELETE ROOT
if(temp->left && temp->right) //If it has two children
{
cout<<"Root with two children"<<endl;
return;
}
if(temp->left || temp->right)
{
cout<<"Root with a single child"<<endl;
return;
}
else {
cout<<"Leaf node"<<endl;
delete temp;
return;
}
}
else if(value<temp->data){
if(temp->left)
temp=temp->left;
else
return;
}
else{
if(temp->right)
temp=temp->right;
else
return;
}
}
}
}