C# 基于子级或父级的树结构

C# 基于子级或父级的树结构,c#,data-structures,tree,C#,Data Structures,Tree,我正在开发一个类,用于生成树结构。树的每个节点都需要知道它的父节点和子节点。用于跟踪每个节点父节点和子节点的字段在基本节点类之外不可访问 现在我有了AddChild和removeChild的方法。从而也设置了相关实例的父字段 因此,我现在想知道的是,在类的用户必须调用Node.SetParent(Node parentNode)和Node.ClearParent(Node oldParentNode)方法的情况下,切换此方法和设置方法是更好还是更差 如果同时跟踪父级和子级关系,为什么选择将子级关

我正在开发一个类,用于生成树结构。树的每个节点都需要知道它的父节点和子节点。用于跟踪每个节点父节点和子节点的字段在基本节点类之外不可访问

现在我有了AddChild和removeChild的方法。从而也设置了相关实例的父字段

因此,我现在想知道的是,在类的用户必须调用Node.SetParent(Node parentNode)和Node.ClearParent(Node oldParentNode)方法的情况下,切换此方法和设置方法是更好还是更差


如果同时跟踪父级和子级关系,为什么选择将子级关系设置在父级关系之上,或者反之亦然,或者这甚至很重要?

在这两种情况下,当您将节点附加到树时,您将需要同时引用相关的父级和子级节点,所以我不认为这会有什么不同,因为无论哪种方式在任何情况下都是同样可能的


我建议找出你的逻辑最有意义的方向(也就是说,从叶子向上还是从根向下构建树更容易),然后再去做。

这样的决定通常取决于类的使用方式。如果一个典型的场景是从父节点开始构建树,那么使用AddChild方法通常是最好的,如果您的用户从另一个角度构建树,则使用SetParent方法。如果两者都需要,则实现两者,只要在类内部完成适当的簿记


(旁注:我通常从父级开始构建树)

我认为这三种方法都需要。在构建树时,
AddChild
方法看起来更自然。删除节点有两个原因。一个是去除它,另一个是重新组织树(将子树移动到另一个分支)。删除时,
RemoveChild
效果良好。但是重组可以使用
SetParent
方法来避免两次调用
SetParent
也可能成为某种类型的事务