gpt4 book ai didi

c++ - 二叉树的深拷贝

转载 作者:太空宇宙 更新时间:2023-11-03 10:44:22 27 4
gpt4 key购买 nike

我有一个包含不同类型节点的树,我需要对其进行深度复制。层次结构看起来像这样:

class AllNodes
{
//this is a purely virtual base class
};
class TreeNode : public AllNodes
{
AllNodes *rChild, *lChild;
};
class LeefNode : public AllNodes
{
int value;
};

问题是,当我想对整棵树进行深拷贝时,我不知道哪些节点会有子节点,哪些节点会有值。我试过这个,但它行不通(原因很明显):

void AllNodes::deepCopy(AllNodes* &copied, AllNodes* o)
{
if(o->rChild == nullptr)
copied->rChild = nullptr;
else
{
copied->rChild = o->rChild;
deepCopy(copied->rchild, o->rChild);
}

if(o->lChild == nullptr)
copied->lChild = nullptr;
else
{
copied->lChild = o->lChild;
deepCopy(copied->lChild, o->lChild);
}
}

有没有人知道如何实现这一点?

最佳答案

创建虚方法并在TreeNode和LeafNode中实现。

class AllNodes
{
//this is a purely virtual base class
virtual AllNodes* copy() const = 0;
};
class TreeNode : public AllNodes
{
AllNodes* rChild, lChild;
virtual AllNodes* copy() const {
TreeNode *n = new TreeNode;
n->rChild = rChild->copy();
n->lChild = lChild->copy();
return n;
}
};
class LeafNode : public AllNodes
{
int value;
virtual AllNodes* copy() const {
LeafNode *n = new LeafNode;
n->value = value;
return n;
}
};

(只是草稿)

关于c++ - 二叉树的深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25619850/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com