【问题标题】:Clone tree data structure with back references?带有反向引用的克隆树数据结构?
【发布时间】:2015-02-04 08:11:33
【问题描述】:

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

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

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

感谢您提供任何有用的建议!

(如果问题是重复的,你让我知道,我会删除它,没问题。)

【问题讨论】:

    标签: c# clone


    【解决方案1】:

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

    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);
    

    【讨论】:

    • 哟,我最终实现了ICloneable。这与您的建议大致相同:手动克隆并寻找父节点。所以我会通过接受来“结束”这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多