【问题标题】:Sorting nodes in mutilivel tree对多棵树中的节点进行排序
【发布时间】:2014-04-03 10:32:16
【问题描述】:

我有一个可以转换成树形结构的类。

public class Tree 
{
    public bool leaf { get; set; }
    public string Path { get; set; }
    public string Name { get; set; }
    public string ID { get; set; }
    public int SortOrder { get; set; }
    public bool expanded { get; set; }
    public List<Tree> children { get; set; }
    public Tree()
    {
        children = new List<Tree>();
    }
}

类中的children属性是一个包含所有子节点的树类列表。

每个节点可以有多个孩子和子孩子。每个节点都有 sortOrder 属性,我想使用它来决定节点在任何给定级别出现的顺序。

对于所有叶子属性为真的节点(树底的节点)需要根据该级别内的 SortOrder 属性进行排序。

如何使用 SortOrder 属性对所有级别的数据进行排序。

【问题讨论】:

  • 你的树的节点存储在哪里?你有他们的清单吗?到目前为止,我认为子列表包含该节点的子项。让 A、B 和 C 是树的唯一节点。假设 A 是树的根,A 的 B 和 C clidren。那么 A 的 SortOrder 将为 0,它的子节点将是两个元素 {B,C} 的列表。最后 B 和 C 的 SortOrder 为 1,它们的子集合为空。对吗?
  • @ChristosPaisios:是的,children 是包含所有子节点的列表。由于子列表的类型为“树”,因此子项中的每个项都可以再次拥有多个子项。
  • @Brown_Dunamite 请发布一个您拥有的示例,一个带有几个节点的树实例,然后向我们展示您期望的输出。谢谢!

标签: c# sorting data-structures


【解决方案1】:

您可以通过在Tree 中添加以下方法来递归排序叶节点:

public void OrderLeaves()
{
  children = children.Where(x => x.leaf).OrderBy(x => x.SortOrder).ToList();

  children.ToList().ForEach(c => c.OrderLeaves());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2017-09-11
    • 2018-01-16
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多