問題を解決するために必要なのは、ツリーの深さを見つけることだけのようです。そのためには、単純な再帰を使用できます。
疑似コード:
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);