C# 仅使用父引用遍历/比较树结构

C# 仅使用父引用遍历/比较树结构,c#,algorithm,recursion,graph,tree,C#,Algorithm,Recursion,Graph,Tree,考虑一个树结构,其中节点只包含对其父节点的引用。因此,根节点的父节点将为null。此树表示类层次结构。目标是在这样的树中搜索特定的子树,如果它不存在,则将其添加到树中。是否有一种算法可以用来实现这一点 在本例中,我有一个C#WinForms应用程序,它使用这种结构。目前,正在使用迭代宽度优先遍历来遍历这样的树,并将其显示为treeView。如何做到这一点如下:为了表示树本身的节点,有一个类Data\u Node。要执行遍历,将节点放入队列中。队列包含数据结构的实例,QueueNode: priv

考虑一个树结构,其中节点只包含对其父节点的引用。因此,根节点的父节点将为null。此树表示类层次结构。目标是在这样的树中搜索特定的子树,如果它不存在,则将其添加到树中。是否有一种算法可以用来实现这一点

在本例中,我有一个C#WinForms应用程序,它使用这种结构。目前,正在使用迭代宽度优先遍历来遍历这样的树,并将其显示为
treeView
。如何做到这一点如下:为了表示树本身的节点,有一个类
Data\u Node
。要执行遍历,将节点放入队列中。队列包含数据结构的实例,
QueueNode

private class QueueNode
{
    public Model.Data_node dataNode; // actual tree node
    public QueueNode parent; // reference to the parent
    public TreeNode treeNode; // node for treeView in the UI
}
下一步是实现另一个这样的树(假设它已经存在,然后检查它是否是第一个树的子树,如果不是,则添加它)


我已经研究了我试图实现的示例,但它们仅适用于二元搜索树,其中节点引用子节点。在我的情况下,节点仅引用父节点。

我不太清楚您的意思,但其工作方式如下。树本身的节点属于
Data\N类型代码中定义的ode
。为了使用广度优先搜索执行遍历,定义了一个数据结构
QueueNode
,该结构具有以下属性:dataNode类型为
data\u Node
,其父类型为
QueueNode
。我希望这是有意义的。如果这有帮助的话,我可以添加一些代码到问题中。这没有意义为什么父母不知道他们的孩子,这是很有道理的。无论如何,你必须在某处保留对孩子的引用,或者你将如何访问他们?无论如何,我怀疑对于你试图做的任何事情,都有一个众所周知的算法(因为问题本身并不常见)。我不确定引用其父节点的树与引用其子节点的树有何不同。更改单词本身,您将拥有一棵包含子节点的树。向下搜索子节点的算法将与您在此处使用的算法相同。您正在倒置查看它,但机制是相同的same@Jawad这棵树有一个轮子ot…如果将树翻转过来,它将不再有一个根…现在用于“只有父引用的树”一个人必须知道所有叶子节点的列表,才能在树上行走……行走必须小心,不要多次拜访父母……我不认为行走这样的树的算法会像普通面包首先搜索树那样简单。