私はAVLツリーを作成しようとしていますが、挿入の影響を受けるノードを追跡するポインタの動的配列を使用しています。私の質問は、動的配列の削除によってポインタも同様です。コードは完成していませんが、私はそれがあなたに何を意味するのかというアイデアを与えると思います。それがうまくいかない場合はどうすればいいですか?ポインタの配列を削除する
treenode *newnode,**roadnodes,*parent ;
int x=(int)log(numberofnodes)+2,l=0 ;
bool *rightorleft,flag=true ;
newnode=new treenode ;
roadnodes=new treenode*[x] ;
rightorleft=new bool[x] ;
newnode->id=i ;
newnode->hl=0;
newnode->hr=0;
newnode->hm=0;
newnode->left=NULL;
newnode->right=NULL ;
if(head==NULL)
{
delete[] roadnodes ;
delete[] rightorleft ;
numberofnodes++ ;
head=newnode ;
return true ;
}
parent=head ;
while(flag)
{
roadnodes[l]=parent ;
if(parent->id>i)
{
if(parent->left)
parent=parent->left ;
else
{
flag=false ;
parent->left=newnode ;
}
rightorleft[l]=true ;
l++ ;
}
else
{
if(parent->right)
parent=parent->right ;
else
{
flag=false ;
parent->right=newnode ;
}
rightorleft[l]=false ;
l++ ;
}
}
return true ;
あなたが代わりに手動メモリ管理のスマートポインタを使用する場合、この問題がちょうど消える... –
'のstd :: unique_ptrを'と 'のstd ::ベクトル<はstd :: unique_ptrを>'任意のリークを避けるために。 –
Jarod42
'rightorleft [l] = true'は、あなたが「コーヒーやお茶」を聞いたときに「はい」と答える迷惑な人々のようです。 'enum Direction {左、右};やそれに類するものを使用してください。 – molbdnilo