そこでわからないところがあるので教えてください。
問題は下のプログラムで、traverse()とaddNode()とdelNode()を実装せよという問題なのですが、traverse()とaddNode()は解けたんですけどdelNode()がわかりません。
いろいろネットでも調べたのですが、いまだに解けません...
delNode()をどうすればいいか教えてください!
--------------------------------------------------------------------------------------
#include <iostream>
using namespace std;
class BinTree{
private:
class BinNode{
public:
int idata;
BinNode *left,*right;
BinNode(int a=0){idata=a;left=right=0;}
void printNode(){cout << idata << " ";}
};
BinNode *root;
void traverse(BinNode *rp);
void addNode(BinNode *rp,BinNode *node);
BinNode *delNode(BinNode *rp,int x);
public:
BinTree(){root=0;}
void printTree(){traverse(root);}
void insert(int x){
BinNode *np=new BinNode(x);
if(!root)root=np;
else addNode(root,np);
}
void remove(int x){root=delNode(root,x);}
};
void BinTree::addNode(BinNode *rp,BinNode *node){
if(rp->idata>node->idata){
if(rp->left!=NULL)
addNode(rp->left,node);
else{
rp->left=node;
}
}
else{
if(rp->right!=NULL)
addNode(rp->right,node);
else{
rp->right=node;
}
}
}
BinTree::BinNode *BinTree::delNode(BinNode *rp,int x){
}
void BinTree::traverse(BinNode *rp){
if(rp==NULL)return;
if(rp->left!=NULL){
traverse(rp->left);
}
rp->printNode();
if(rp->right!=NULL){
traverse(rp->right);
}
}
int main(){
BinTree bt; // 空の二進木を作成
int x;
cout << "正整数をいくつか入力せよ --> ";
while(cin >> x && x >0){ // 負数が入力されるまで正整数を入力
bt.insert(x); // x をデータとして持つノードを木に追加
}
bt.printTree(); // bt の木全体を表示する
cout << endl;
while(cout << "削除したい正整数 --> " && cin >> x && x > 0){
bt.remove(x);
bt.printTree();
cout << endl;
}
return 0;
}
ちなみに実行結果は
正数値をいくつか入力せよ --> 8 10 3 9 5 1 12 4 11 -1
1 3 4 5 8 9 10 11 12
消去したい正数値 --> 8
1 3 4 5 9 10 11 12
消去したい正数値 --> 1
3 4 5 9 10 11 12
消去したい正数値 --> 12
3 4 5 9 10 11
消去したい正数値 --> 1
左エラー:1:そのようなノードはありません
3 4 5 9 10 11
消去したい正数値 --> 12
右エラー:12:そのようなノードはありません
消去したい正数値 --> -1
終了
よろしくお願いします。