似乎您需要解决的问题就是找到树的深度,因此您可以使用简单的递归。
伪代码:
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);