我创建了以下类(简体):
public class ClassItem{
//Sub-Groups
public List<ClassItem> Children { get; set; }
public Int64 MaxChilds { get; set; }
//Properties
.........
}
现在我尝试使用递归方法将每个分支中的最大子项放到上一级。为了澄清这一点,请说我有以下结构:
- ClassItem 1 (5)
- ClassItem 1.1 (1)
- ClassItem 1.1.1 (0)
- ClassItem 1.2 (0)
- ClassItem 1.3 (3)
- ClassItem 1.3.1 (0)
- ClassItem 1.3.2 (0)
- ClassItem 1.3.3 (2)
- ClassItem 1.3.3.1 (0)
- ClassItem 1.3.3.2 (0)
- ClassItem 1.4 (5)
- ClassItem 1.4.1 (0)
- ClassItem 1.4.2 (0)
- ClassItem 1.4.3 (0)
- ClassItem 1.4.4 (0)
- ClassItem 1.4.5 (0)
括号内的数字是最大值;儿童的数量或其子女在其任何一个分支中的子女数量。
我尝试了很多东西,但它似乎没有正常运行。我现在拥有以下内容:
private void FindMaxChilds(ClassItem classItem, ref Int64 horizontalMaxLevels) {
//Count horizontal for each child
if (horizontalMaxLevels < classItem.Children.Count) {
horizontalMaxLevels = classItem.Children.Count;
}
foreach (ClassItem cci in classItem.Children) {
FindMaxLevels(cci, ref horizontalMaxLevels);
}
classItem.MaxChilds = horizontalMaxLevels;
}
有人可以帮助我前往那里吗?
答案 0 :(得分:3)
我把它分成了DirectChildren,以及我孩子的输出。
public static int MaxDirectChidrenPerItem(ClassItem item)
{
if (item.Children == null || item.Children.Count == 0)
{
return 0;
}
int directChildrenCount = item.Children.Count();
int descendantMaxCount = item.Children.Max(child => MaxDirectChidrenPerItem(child));
return Math.Max(directChildrenCount, descendantMaxCount);
}
答案 1 :(得分:2)
使用@ OrelEraki的答案,我认为你不需要一个方法,但你可以将所有东西都包装在一个属性中:
public class ClassItem
{
public List<ClassItem> Children { get; set; }
public Int64 MaxChildren
{
get
{
if (this.Children == null || this.Children.Count == 0)
{
return 0;
}
int directChildrenCount = this.Children.Count();
int descendantMaxCount = this.Children.Max(child => child.MaxChildren);
return Math.Max(directChildrenCount, descendantMaxCount);
}
}
}