我有这种树需要进行深层复制的不同类型的节点。层次结构看起来是这样的:二叉树的深层副本
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);
}
}
有谁有如何做到这一点的一些想法?
希望这是真的'allnodes中* rChild,* lChild ;'。 *巨大差距。并且这样做根本不会* node * copy * *如果你正在做一个真正深的“复制”,你可以期望在这个过程中实际分配一些*节点*。 – WhozCraig 2014-09-02 09:20:00
如果您只是使用'value_ptr'来存储节点会怎么样?和“变种”来存储价值或孩子。 – 2014-09-02 09:20:03
你只是分配指针,当然这是一个浅拷贝...先分配内存,然后将数据复制到新内存中,然后分配指针 – 2014-09-02 09:20:11