反向的treenodes水平

时间:2012-08-26 04:32:51

标签: c# treeview treenode

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

depth-selectednodeLevel

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

例如通常的treenodes级别如下

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

我想成功

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

1 个答案:

答案 0 :(得分:0)

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

伪代码:

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);