C++でバイナリツリーデータ構造のディープコピーを作成しようとしています。問題は、私が使用しているコードは、私に浅いコピーを与えているように思えるだけです(私のデコンストラクタに問題を引き起こすようです)。バイナリツリーのディープコピーコンストラクタ
以下のコードは、私のバイナリツリーのコピーコンストラクタです:
BinaryTreeStorage::BinaryTreeStorage(const BinaryTreeStorage ©tree):root(NULL)
{
root = copytree.root;
copyTree(root);
}
BinaryTreeStorage::node* BinaryTreeStorage::copyTree(node* other)
{
//if node is empty (at bottom of binary tree)
/*
This creates a shallow copy which in turn causes a problem
with the deconstructor, could not work out how to create a
deep copy.
*/
if (other == NULL)
{
return NULL;
}
node* newNode = new node;
if (other ->nodeValue == "")
{
newNode ->nodeValue = "";
}
newNode->left = copyTree(other->left);
newNode->right = copyTree(other->right);
return newNode;
}
任意の助けをいただければ幸いです。 おかげでここ
は、あなたのルートノードの深いコピーを実行していないBinaryTreeStorage::~BinaryTreeStorage(void)
{
try
{
destroy_tree();//Call the destroy tree method
delete root;//delete final node
}
catch(int &error)
{
cout << "Error Message : " << error << endl;
}
}
void BinaryTreeStorage::destroy_tree()
{
destroy_tree(root);
}
void BinaryTreeStorage::destroy_tree(node *leaf)
{
if(leaf!=NULL)
{
//Recursively work way to bottom node
destroy_tree(leaf->left);
destroy_tree(leaf->right);
//delete node
delete leaf;
}
}
nodeValueがstringであると仮定すると、newNode-> nodeValueにメモリを割り当て、other-> nodeValueの値をnewNode-> nodeValue – rt2800
にコピーする必要があります。 noob応答のおかげで申し訳ありません:P –
根の深いコピー(回答を参照)の次に、空の文字列でない場合は値も渡しません。あなたはおそらく 'node * newNode = new node(* other); – stefaanv