zoukankan      html  css  js  c++  java
  • 用递归形成树结构数据

    定义一个树形实体 

            public class orgTrees
            {
                public orgTrees()
                {
                    this.Children = new List<orgTrees>();
                }
                public int Id { get; set; }
                public int FatherId { get; set; }
                public string Name { get; set; }
                public int Lever { get; set; }
                public bool HasChildren { get; set; }
                public string OrgCode;
                public int OrgType;
                public List<orgTrees> Children { get; set; }
            }

    开始递归方法

     1         /// <summary>
     2         /// 获取组织层级树
     3         /// </summary>
     4         /// <returns></returns>
     5         public AjaxResponse<orgTrees> GetOrgTrees()
     6         {
     7             var list = new List<orgTrees>();
     8             var orgLayerList = _organizeProxy.ListOrgInfoForManage();
     9             
    10             var dic = new Dictionary<int, orgTrees>(orgLayerList.Count);
    11             foreach (var item in orgLayerList)
    12             {
    13                 dic.Add(item.Info.Id, new orgTrees
    14                 {
    15                     Id = item.Info.Id,
    16                     FatherId = item.Info.FatherId,
    17                     Name = item.Info.Name.GetValueByLanId(WorkContext.WorkingLanguage.Id),
    18                     Lever = item.Layer,
    19                     OrgCode = item.Info.OrgCode,
    20                     OrgType = item.Info.OrgType,
    21                 });
    22             }
    23 
    24             //根节点
    25             var rootNode = orgLayerList.Where(x => x.Info.FatherId.Equals(-1)).First();
    26             var model = new orgTrees();
    27             model.Id = rootNode.Info.Id;
    28             model.FatherId = rootNode.Info.FatherId;
    29             model.Name = rootNode.Info.Name.GetValueByLanId(WorkContext.WorkingLanguage.Id);
    30             model.Lever = rootNode.Layer;
    31             model.OrgCode = rootNode.Info.OrgCode;
    32             model.OrgType = rootNode.Info.OrgType;
    33             model.HasChildren = rootNode.HasChildren;
    34             CreatTree(model.Id, model, orgLayerList);
    35             return new AjaxResponse<orgTrees>(model);
    36         }
    37         //生成树的方法
    38         public void CreatTree(int parentId, orgTrees tree, LayerList<OrganizeInfo> laerList)
    39         {
    40             //获取子节点
    41             var childrenNode = laerList.ToList().FindAll(x => x.Info.FatherId == Convert.ToInt32(parentId));
    42             //如果没有字节点了,那就返回空
    43             if (childrenNode.Count == 0) return;
    44             List<orgTrees> nodeTrees = new List<orgTrees>();
    45             for (int i = 0; i < childrenNode.Count; i++)
    46             {
    47                 orgTrees node = new orgTrees();
    48                 node.Id = childrenNode[i].Info.Id;
    49                 node.Name = childrenNode[i].Info.Name.GetValueByLanId(WorkContext.WorkingLanguage.Id);
    50                 node.FatherId = childrenNode[i].Info.FatherId;
    51                 node.Lever = childrenNode[i].Layer;
    52                 node.OrgCode = childrenNode[i].Info.OrgCode;
    53                 node.OrgType = childrenNode[i].Info.OrgType;
    54                 node.HasChildren = childrenNode[i].HasChildren;
    55                 //递归
    56                 CreatTree(childrenNode[i].Info.Id, node, laerList);
    57                 nodeTrees.Add(node);
    58             }
    59             tree.Children = nodeTrees; //由于对象是引用类型,因为可以改变参数的值
    60         }

    说下思路就是 先把根节点找出来,然后寻找根节点的子节点 然后递归循环子节点,寻找子节点的子节点

    最后生成的是就是 

  • 相关阅读:
    重置主键自增
    tp5引入第三方类库
    判断浏览器是否是手机端
    网站二级域名的配置
    阿里云服务器php环境的搭建
    备忘录——二维码
    (3) 编写一个截取字符串的函数,输入一个字符串和字节数,输出按字节书截取的字符串,但是要保证汉字不能截半个
    (2) 假设字符串类似这样的aba和aab就相等,现在随便给你二组字符串,请编程比较他们看是否相等
    (1) 一个字符串,根据输入参数m,找出字符串的m个字符的所有字符串
    Windows下MySQL双向同步及环形同步的实现
  • 原文地址:https://www.cnblogs.com/dzhengyang/p/8515826.html
Copyright © 2011-2022 走看看