c# n元树的深度拷贝
本文关键字:深度 拷贝 | 更新日期: 2023-09-27 18:13:20
我有一个n-ry树,节点如下:
class Node
{
public Node Parent = null;
public List<Node> Children = new List<Node>();
public string Name;
}
我需要对原树做一个深度拷贝,避免在原树改变的时候改变新树。我只知道如何做肤浅的复制:
public Node Copy(Node original)
{
Node newNode = new Node();
newNode.Parent = original.Parent;
newNode.Children = original.Children;
newNode.Name = original.Name;
return newNode;
}
在这种情况下,我复制两个节点指向内存中的对象,当原始节点更改时,newNode将更改为。有人能帮我做深度克隆吗?
你必须递归地做。并且您需要为创建的克隆创建一个父级。
public Node Copy(Node origin, Node parent = null)
{
if (origin == null)
{
return null;
}
var result = new Node { Parent = parent, Name = origin.Name };
result.Children = origin.Children != null ? origin.Children.Select(x => Copy(x, result)).ToList() : null;
return result;
}
如果您只有Node
而没有系统类型,这将有所帮助。
递归执行。注意,这会将第一个节点的父节点设置为null。也就是说,如果你从树的中间开始复制,父节点将不会被维护。
public Node Copy()
{
Node newNode = new Node();
newNode.Name = this.Name;
foreach(var child in this.Children)
{
newChild = child.Copy();
newChild.Parent = newNode;
newNode.Children.Add(newChild);
}
return newNode;
}