【问题标题】:reverse levels of treenodes树节点的反向级别
【发布时间】:2012-08-26 04:32:50
【问题描述】:

在树节点中,级别将按升序增加我想编写一个函数,以便它反转树的级别我知道我应该得到树的深度,然后计算

depth-selectednodeLevel

这样它将导致树级别按降序排列 我不知道如何获得树的深度,属性LastNode 将给出节点的最后一个子节点,我不能将它用于深度,因为它会返回 lastNode 仅针对该级别而不是较低级别.

例如通常的树节点级别如下

|0|
 |
|1|
 |
|2|
 |
|3|

我想做

 |3|
  |
 |2|
  |
 |1|
  |
 |0|

【问题讨论】:

    标签: c# treeview treenode


    【解决方案1】:

    似乎解决问题所需要做的就是找到树的深度,因此您可以使用简单的递归。

    伪代码:

    int GetDepth(Node node)
    {
        return node.HasChilds ? node.Childs.Max(GetDepth) : node.Level;
    }
    

    而在 C# 中,假设您使用 TreeNode 类来表示节点:

    public int GetDepth(TreeNode node)
    {
        return node.Nodes.Count == 0
            ? node.Level
            : node.Nodes.Cast<TreeNode>().Select(this.GetDepth).Max();
    }
    

    用法:

    var depth = GetDepth(myTree.Root);
    

    如果你没有每个节点的 Level 属性,你可以像这样添加一个参数:

    public int GetDepth(TreeNode node, int depth)
    {
        return node.Nodes.Count == 0
            ? depth
            : node.Nodes.Cast<TreeNode>()
                  .Select(x => this.GetDepth(x, depth + 1)).Max();
    }
    

    用法:

    var depth = GetDepth(myTree.Root, 0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多