1. 程式人生 > >C#算法實現獲取樹的高度

C#算法實現獲取樹的高度

定義 brep 樹結構 nbsp 數據結構 view () rep 可能

我們知道,樹類型作為數據結構中的重要一員,樹的很多實現都是來自遞歸。本文想要實現的就是在桌面客戶端項目開發中,經常用到的樹結構(.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;
}
} 這裏要提醒一下,計算樹的高度之類的算法實現,需要首先弄清楚高度的概念:從根結點開始算起。

C#算法實現獲取樹的高度