从儿童获取(父母)名单

时间:2014-04-14 16:40:19

标签: c# .net recursion

public class Folder
{
    public int ID { get; set; }
    public List<Folder> Children { get; set; }
}

我有一个递归树,但是,根据我需要返回的一些文件夹并将(状态)添加到父文件夹。

当我在父文件夹中创建子文件夹时,我可以更新上一级别没问题。然而,我无法回到更多级别......所以我们举个例子说..

1 Appliances NULL (Active)
2 TV 1 (Active)
3 Radio 1 (Active)
4 Furniture NULL (Active)
5 Chair 4 (Active)
6 Sofa 4 (Active)
7 Specials 4 (Active)
8 Golden Sofa 7 (Not Active)

让我们说我需要回到Specials,并让它不活跃,没关系,我没有问题,但我需要回到特殊的父母(家具)并让它不活跃......

C#求助!

我不介意使用LINQ不知道如何做到这一点.... MERCI!

1 个答案:

答案 0 :(得分:1)

将您的班级更改为此

public class Folder
{
    public Folder Parent{get;set;}
    public int ID { get; set; }
    private List<Folder> children { get; set; }
    public ReadOnlyCollection<Folder> Children { get { return children.AsReadOnly();}
    public void AddChildern(Folder child)
    {
       child.Parent = this;
       children.Add(child);
    }

    public void RemoveChildren(Folder child)
    {
       ...
    }
}

因此,您可以向前或向后遍历文件夹,然后使用简单的递归功能,您可以进入顶级n级

例如,您想在父母中找到一个节点,您可以通过此方法

来完成
public Folder FindInParentsByID(Folder node,int ID)
{
   if (node.Parent == null)
     return null;
   if (node.Parent.ID == ID)
     return node.Parent;
   else
     return FindInParentByID(node.Parent,ID)
}

或者如果你想要所有的父母,你可以通过这种方法来做到这一点

public void FetchAllParents(Folder node, List<Folder> parentlist)
{
  if (node.Parent == null)
     return;

  parentlist.Add(node.Parent);
  FetchAllParents(node.Parent, parentList);
}

并创建一个空列表并将其传递给方法

相关问题