今天为了解决treeview数据绑定的问题。不得不又把递归算法拿来复习啦一下。想来已经有好几年没有碰这个东东咯:)还是在大学学数据结构的时候学的。当时觉得这个东东没有什么用。不过现在看来用处蛮大的,真的是书到用时放很少啊!!!
首先建立一个数据库
id text sjid
1 a 0
2 b 1
3 c 1
4 d 2
5 e 2
6 f 3
7 g 3
8 h 2
id:主键 text:节点主题 sjid:上级节点id
递归的算法精髓就是,函数在方法体内自己调用自己。它特别适合用来遍历树结构。我们先查询出数据中本节点的所有子节点,然后遍历这些子节点。遍历时实施递归调用,再查询子节点的子节点。直到末级没有子节点后,逐级返回。
其实这个用图比较好表示,不过这里没有图,只有口述咯:)
代码如下:
void recursion(int sjid)
{
//每次递归都要实例化一个集合,这里我们用的是dataset
DataSet1.recursionDataTable ds = new DataSet1.recursionDataTable();
ds = ta.Getsjid(sjid);//查询出下级节点
if (ds.Count != 0)//判断是否有下级节点,没有就跳过,不再递归。
{
foreach (DataSet1.recursionRow row in ds.Rows)//有就遍历下级节点
{
//打印下级节点信息
Console.Write(row.id+" ");
Console.Write(row.text+" ");
Console.WriteLine(row.sjid);
recursion(row.id);//递归调用,将下级节点id作为参数传过去,继续查找它的子节点
//每次递归都会等待下级节点查询完毕返回,在继续遍历下一个同级级节点
//也就是说它会等递归到末级节点后,逐级返回。
}
}
}