首页 > 解决方案 > 如何将二叉树附加到另一个

问题描述

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

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

标签: c++pointersrecursiontree

解决方案


需要做的一些改动: 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);
        }
}

推荐阅读