递归确定子结构
本文关键字:结构 递归 | 更新日期: 2023-09-27 18:33:19
我创建了以下类(简体):
public class ClassItem{
//Sub-Groups
public List<ClassItem> Children { get; set; }
public Int64 MaxChilds { get; set; }
//Properties
.........
}
现在我正在尝试使用递归方法将每个分支中的最大 Children 提升到上层。为了澄清这一点,假设我有以下结构:
- 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;
}
有人可以在到达那里的路上帮助我吗?
我把它分成了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);
}
使用 @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);
}
}
}