誰かが私のBST実装を正しく削除する方法を理解できますか?私はそれが簡単な問題だと知っていますが、私はすべてを試しました。私は動的配列を宣言することを避けたいと思いますし、可能であれば、このポインタ構造を持つコードを保つことができます。問題はデストラクタセクションにあります。ありがとう!C++でBSTを削除するには?
#include<iostream>
using namespace std;
struct Tree{
struct Tree* left;
struct Tree* right;
int val;
Tree(int);
~Tree();
void Print();
};
Tree::Tree(int val){
this->val = val;
cout<<"insert l/r for node: "<<this->val<<" , type 0 0 - exit" <<endl;
int l,r;
cin>>l>>r;
if(l and r){
this->left = new Tree(l);
this->right = new Tree(r);
}else if(l==0 and r==0){
this->left = NULL;
this->right = NULL;
return;
}
}
Tree::~Tree(){
if(this->left == NULL and this->right == NULL){
delete this;
return;
}else{
this->left->~Tree();
this->right->~Tree();
}
}
void Tree::Print(){
if(this == NULL) return;
cout<<this->val<<endl;
this->left->Print();
this->right->Print();
}
int main(){
int n;
cin>>n;
Tree* newT = new Tree(n);
newT->Print();
newT->~Tree();
//cout<<newT->val<<endl;
//newT->Print();
return 0;
}
私は理解しますが、代わりにメモリを解放する必要がありますか?最初にnewTというオブジェクトを削除しただけでは、その子にアクセスすることはできません。 – Valio
@ValentinKostadinov木を削除すると、なぜ子供たちにアクセスしたいのですか? –
気にしないでください。みんなありがとう。私はそれを得て、そのような間違いを避けようとします。 – Valio