C#算法实现获取树的高度

mac2022-06-30  20

 我们知道,树类型作为数据结构中的重要一员,树的很多实现都是来自递归。本文想要实现的就是在桌面客户端项目开发中,经常用到的树结构(.Net平台下有个控件为TreeView)。事实上,我们可能因业务需求自行定义一个树类型的数据结构。

 接下来,首先给出我一开始用来获取树的深度的算法实现(存在欠缺)

 

private int GetExportReportTemplateColumns(ReportTemplateTreeDTO reportTemplateTree, int reportTemplateTreeDepth, int treeDepthMark)         {             var reportTemplate = reportTemplateTree.ReportTemplate;             int childrenCount = reportTemplateTree.Children.Count();             if (childrenCount > 0)             {                 ++reportTemplateTreeDepth;                 for (int j = 0; j < childrenCount; j++)                 {                     GetExportReportTemplateColumns(reportTemplateTree.Children[j], reportTemplateTreeDepth, treeDepthMark);                 }             }             else             {                 if (+treeDepthMark < reportTemplateTreeDepth) treeDepthMark = reportTemplateTreeDepth;             }             return treeDepthMark == 0 ? reportTemplateTreeDepth + 2 : treeDepthMark + 2;         }

上面这个算法,获取的是实时的树下的子节点高度,最终无法实现返回子树的最大高度值作为该树的高度。

后经查阅资料,改进如下:

private int GetExportReportTemplateTreeDepth(ReportTemplateTreeDTO reportTemplateTree)         {             int reportTemplateTreeDepth = 0;             if (reportTemplateTree.Children.Count == 0)                 return 1;             else             {                 foreach (var reportTemplate in reportTemplateTree.Children)                 {                     int subReportTemplateTreeDepth = GetExportReportTemplateTreeDepth(reportTemplate);                     if (subReportTemplateTreeDepth > reportTemplateTreeDepth) reportTemplateTreeDepth = subReportTemplateTreeDepth;                 }                 return reportTemplateTreeDepth + 1;             }         }  这里要提醒一下,计算树的高度之类的算法实现,需要首先弄清楚高度的概念:从根结点开始算起。

转载于:https://www.cnblogs.com/Jashinck/p/7066160.html

最新回复(0)