C#递归删除节点

C# Recursive delete nodes

我为分层数据创建了一个 class。从这个 class 我生成自定义树视图。在将数据发送到树视图之前,我需要删除一个不以实例结尾的分支,其中 HaveData = true

    public class Data
    {
        public List<Data> Children
        {
            get;
            set;
        }

        public bool HaveData
        {
            get;
            set;
        }
    }

之前的树视图:

1 First
1.1 Item
1.1.1 Item (HaveData = false)
1.2 Item
1.2.1 Item (HaveData = true)
...

我需要:

1 First
1.2 Item
1.2.1 Item (HaveData = true)
...

如何遍历所有节点并仅删除以 HaveData = false 结尾的节点? 谢谢。

  1. 如果元素有数据或其任何子元素有数据,则使 HaveData 为真。

  2. 删除树中 HaveData 为假的任何节点。

  3. ???

  4. 利润。

这是一种递归的方法:

public void DeleteBranchWithNoData()
{
    var toBeRemoved = new List<Data>();
    foreach(var child in Children)
    {
        if(!child.HaveData && (child.Children == null || !child.Children.Any()))
        {
            toBeRemoved.Add(child);
        }
        else
        {
            child.DeleteBranchWithNoData();
        }   
    }
    Children.RemoveAll(d => toBeRemoved.Contains(d));
}

从要删除的分支的顶层节点调用此方法。

You can see a live demo on rextester.