克隆树数据结构与反向引用?

时间:2015-02-04 08:11:33

标签: c# clone

我想克隆一个对象树,其中每个节点也引用父节点:

enter image description here

如何避免一次多次克隆父母?每个节点都是Guy。当我克隆没有父母的根人时,我会克隆其孩子和孩子的孩子。孩子的父母不能再次克隆,因为我已经克隆过了。那么我使用什么克隆技术?它如何避免我的困境呢?

public class Guy
{
    private Guy parent = null;
    private List<Guy> children = new List<Guy>();
    private double x, y, z;
}

感谢任何有用的建议!

(如果问题重复,你告诉我,我会删除它,没问题。)

1 个答案:

答案 0 :(得分:2)

据我了解,克隆可以使用以下递归函数完成。

public Guy Clone(Guy original, Guy parent = null)
{
    Guy originalClone = new Guy();
    originalClone.parent = parent;
    foreach (Guy child in original.children)
    {
        originalClone.children.Add(Clone(child,originalClone));
    }
    return originalClone;
}

通过以下调用返回树副本的根目录。

Guy RootOfCopy = Clone(RootOfOriginal);