void Tree::appendTree(TreeNode *ptrMod, TreeNode *ptrApp, string
type_node) {
if (ptrMod == nullptr) {
return;
}
if (ptrMod->getType() == type_node) {
delete(ptrMod);
ptrMod=ptrApp;
} else {
appendTree(*(ptrMod->getLeftAddress()),ptrApp,type_node);
appendTree(*(ptrMod->getRightAddress()),ptrApp,type_node);
}
}
ptrMod指向我正在检查的节点,以检查它是否是我要替换的节点。 ptrApp是我要附加的树的根。
答案 0 :(得分:2)
需要进行一些更改:1.添加一个返回值,以便您知道交换是否成功。 2.在子树上递归释放可用内存。
bool Tree::appendTree(TreeNode* & ptrMod, TreeNode* & ptrApp, string
type_node) {
if(ptrMod==nullptr)
{
return false; // did not swap
}
if(ptrMod->getType() == type_node){
delete(ptrMod); // I hope you overloaded the delete operator to correctly delete all nodes of the tree
ptrMod=ptrApp;
return true; // swapped correctl;
}
else
{
if (appendTree(*(ptrMod->getLeftAddress()),ptrApp,type_node))
return true;
else return appendTree(*(ptrMod->getRightAddress()),ptrApp,type_node);
}
}