zoukankan      html  css  js  c++  java
  • C#算法实现获取树的高度

     我们知道,树类型作为数据结构中的重要一员,树的很多实现都是来自递归。本文想要实现的就是在桌面客户端项目开发中,经常用到的树结构(.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;
                }
            }
     这里要提醒一下,计算树的高度之类的算法实现,需要首先弄清楚高度的概念:从根结点开始算起。

    墨匠
  • 相关阅读:
    使用工具自动生成Linq类文件
    DateTime.MinValue和MaxValue引发的异常
    C# AD 验证登陆
    HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法
    清理sqlserver 2012 日志文件
    如何修改博客园插入代码的默认代码大小?
    hdu 1241:Oil Deposits(DFS)
    【2014年寒假日常记录表(2014.1.9—2.23,45天)】
    hdu 1016 Prime Ring Problem(DFS)
    蓝桥杯 历届试题 错误票据(水题,排序)
  • 原文地址:https://www.cnblogs.com/Jashinck/p/7066160.html
Copyright © 2011-2022 走看看