C#递归实现无限级分类树

2012-10-21

网上的无限级分类树已经被实现无数遍了,但是大部分都不是很爽,而且php的居多,实际情况需要,还是自己写一个比较好,算法弱啊,得好好练练基础算法了。

C#递归实现无限级分类代码如下:

/// <summary>
        /// 获取分类树
        /// </summary>
        /// <param name="catelisttree">生成后的树</param>
        /// <param name="parentid">父类id</param>
        /// <param name="depth">递归深度</param>
        /// <returns></returns>
        public static List<InfoCate> GetCateListTree(List<InfoCate> catelisttree, int parentid = 0, int depth = 0)
        {
           //获取所有分类,此处由于递归会调用好几次数据库,在实际使用中用单例去实现,放内存里去。
            var catelist = DatabaseProvider.InstancePost.GetCateList().FindAll(c => c.ParentId == parentid);
            
            //显示树的层次标识符
            var treechar = " └ ";

            //循环读取取出的所有分类
            foreach (var infoCate in catelist)
            {
                //定义一个树枝
                var branch = string.Empty;
                //第一次递归不处理,以后逐层的增加树枝
                if (depth > 0)
                {
                    //通过padleft实现根据深度来自增树枝
                    branch = (treechar).PadLeft(depth, ' ');
                }
                //重新赋值增加树枝后的新的分类名称
                infoCate.CateName = branch + infoCate.CateName;

                //把遍历后的分类添加到目标树中
                catelisttree.Add(infoCate);

                //递归操作
                GetCateListTree(catelisttree,infoCate.CateId, depth + 1);
            }

            //返回树供下一次递归使用
            return catelisttree;
        }

调用代码如下:

[TestMethod]
        public void TestCategoryTree()
        {
            var catelisttree=new List<InfoCate>();
            var catelist = GetCateListTree(catelisttree);
            foreach (var infoCate in catelist)
            {
                Console.WriteLine(infoCate.CateName);
            }
        }
作者:robotbird, 分类:关于代码 标签: donet 算法 , 浏览(9065), 评论(0)
上一篇: Solr\Lucene优劣势分析,转载于淘宝java团队
下一篇: 从今天开始坚持不刷技术类文章

相关文章

(0)条评论 订阅

发表评论

电子邮件用于回复通知和avatar全球唯一头像 *

*