递归算法
class Program
{
static void Main(string[] args)
{
var sourceList = new List<SourceTable>{
new SourceTable {Id=1,Name="中国移动",ParentId = 0},
new SourceTable {Id=2,Name="中国人寿",ParentId = 0},
new SourceTable {Id=3,Name="销售公司",ParentId = 1},
new SourceTable {Id=4,Name="生产公司",ParentId =1},
new SourceTable {Id=5,Name="销售部",ParentId = 3},
new SourceTable {Id=6,Name="生产部",ParentId = 4},
new SourceTable {Id=7,Name="网络部",ParentId = 2},
new SourceTable {Id=8,Name="研发部",ParentId = 2},};
var result = new TreeNode();
RecursiveTree(sourceList, result);
Console.Read();
}
static void RecursiveTree(IList<SourceTable> sourceList, TreeNode root, TreeNode node=null)
{
var id=node==null?0:node.Id;
var dt =
sourceList.Select(p => new TreeNode { Id = p.Id, Name = p.Name, ParentId = p.ParentId })
.Where(p => p.ParentId == id)
.ToList();
foreach (var d in dt)
{
TreeNode nd = new TreeNode { Name = d.Name };
RecursiveTree(sourceList, root, nd);
if(node==null)
root.Nodes.Add(nd);
else
node.Nodes.Add(nd);
}
}
}
public class SourceTable
{
public long Id { get; set; }
public string Name { get; set; }
public long ParentId { get; set; }
}
public class TreeNode
{
public TreeNode()
{
Nodes = new List<TreeNode>();
}
public long Id { get; set; }
public string Name { get; set; }
public long ParentId { get; set; }
public IList<TreeNode> Nodes { get; set; }
}
递归算法的效率问题:
递归算法是从同一个总的数据源集合中不断地去将数据按层级结构来划分,知道当前数据没有根节点为止。
1.不断的从数据源中遍历查找数据【cpu】
2.数据源的数据量【内存】
3.查找的层级【如果没有限制层级,无限制查找下去,对性能是影响很大的】
递归算法是一种占用电脑性能资源很高的一个操作。如果数据源的数据量不大,递归操作还算可以接受,如果数据量很大,那么递归就不是很适合了,或者说要换一种形式来处理。
可以借鉴的几种方案有:1.层级异步,通过事件来触发 2.引入缓存(增加了缓存数据的管理,需要维护缓存数据)