找到Deepest孩子Treenode的水平

时间:2011-11-29 12:21:46

标签: c# winforms recursion treenode

我有treenode&我想找到treenode中最深的孩子。 如果有2个子节点level 11& level 13然后我需要将函数返回给我13。

我该怎么做?

public int FindLevel(TreeNode oParentNode)
{
   counter++;
  forech(TreeNode oSubNode in oParentNode.Nodes)
  {
    FindLevel(oParentNode);
  }

 return Counter;
}

3 个答案:

答案 0 :(得分:8)

以下是我的建议:

private int GetDeepestChildNodeLevel(TreeNode node)
{
    var subLevel = node.Nodes.Cast<TreeNode>().Select(GetDeepestChildNodeLevel);
    return subLevel.Count() == 0 ? 1 : subLevel.Max() + 1;
}

这里有明确的类型:

private int GetDeepestChildNodeLevel(TreeNode node)
{
    var subLevel = node.Nodes.Cast<TreeNode>().Select<TreeNode, int>(subNode => GetDeepestChildNodeLevel(subNode));
    return subLevel.Count<int>() == 0 ? 1 : subLevel.Max() + 1;
}

答案 1 :(得分:1)

以下是TreeView的扩展方法,它返回Level中最深节点的TreeView

public int GetDeepestNodeLevel(this System.Windows.Forms.TreeView treeView)
{
    int level = -1;
    foreach (System.Windows.Forms.TreeNode node in treeView.Nodes) {
        int deep = DigInNodes(node);
        if (deep > level)
            level = deep;
    }
    return level;
}
private int DigInNodes(System.Windows.Forms.TreeNode node)
{
    int level = node.Level;
    foreach (System.Windows.Forms.TreeNode subnode in node.Nodes) {
        int deep = DigInNodes(subnode);
        if (deep > level)
            level = deep;
    }
    return level;
}

代码经过测试并适用于我。

答案 2 :(得分:-2)

这是获得所选节点深度的快速方法。

 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
    {
        TreeNode node = treeView1.SelectedNode;
        MessageBox.Show(string.Format("You selected: {0}{1}", node.Text,e.Node.Level));

    }