C/C++の宿題片付けます 155代目
■ このスレッドは過去ログ倉庫に格納されています
0899 ◆QYp3PAZy.Y
2012/02/01(水) 21:19:33.70二度も申し訳ないのですが、二分探索木の問題で今度は再帰を用いてのプログラムを組むことになったのですが、
void *delete(node *root,char n[])
{
node *p,*q; p=root->left;q=root;
if(search(root,n)!=NULL){
while(p!=NULL){
if(strcmp(n,p->name)==0)break;
q=p;
if(strcmp(n,p->name)>0)p=p->right;
else p=p->left; }
if(p==NULL)return;
if(p->left==NULL){ //削除節点の左部分木が空の場合
if(p==q->left)q->left=p->right; //削除データが左部分木にある
else q->right=p->right; //削除データが右部分木にある
return; }
if((p->left==NULL)&&(p->right==NULL)){ //削除節点が葉の場合
if(p==q->left)q->left=NULL; //削除データが右部分木にある
else q->right=NULL; //削除データが左部分木にある
return; }
}
else puts("データは存在しません。");
return; }
ここまではできたのですが、場合分けの「削除するデータの左部分木、右部分木がからでない場合」
の実現の仕方がわかりません。再帰を使うにもどのように組み込めばいいのかわかりません。 このプログラムに組み込む形で、分かる人いましたら解答お願いします。
■ このスレッドは過去ログ倉庫に格納されています