如何将二叉树附加到另一个

时间:2019-07-17 10:43:19

标签: c++ pointers recursion tree

我正在编码一个函数,该函数应该附加一个二叉树来替换另一棵树的节点。我将两个树的根和要替换的节点的标识符传递给函数,但是我不确定如何交换指向我要删除的节点的指针的地址并将其设置为指向我要附加的树的根。

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是我要附加的树的根。

1 个答案:

答案 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);
        }
}