C#递归建树方法
答案:3 悬赏:60 手机版
解决时间 2021-01-24 01:20
- 提问者网友:战皆罪
- 2021-01-23 21:14
C#递归建树方法
最佳答案
- 五星知识达人网友:野味小生
- 2021-01-23 21:55
不知道你是不是访问数据库,我最近也再写个项目,需要递归一个节点下面的所有子节点,我自己写了两个存储过程!注意是嵌套的,我的表结构为id,title,parent,如下:
CREATE proc getChildTNode
@selectid int --这里是传入一个你选择的节点id
as
declare @id int--声明了一个游标变量id
insert #temp select * from tree where parent=@selectid --先插入parent字段为选择id的所有子节点
declare MyCursor cursor local for select [id] from tree where parent=@selectid--声明游标
open MyCursor--打开游标
fetch next from MyCursor into @id--读取下一行
while(@@fetch_status = 0)--判断,至于为什么要判断=0,就不用追究了
begin
exec getChildTNode @id --递归调用
fetch next from MyCursor into @id --将下一个节点id放进id变量作为父节点遍历
end
close MyCursor--关闭游标
deallocate MyCursor--什邡游标
这里还没有完,还有以下调用上面这个存储过程
CREATE proc getChildTNodes
@select int--同上面的定义一个父节点变量
as
create table #temp(
[id] int,
title varchar(50),
parent int,
)--建立一个临时表
exec getChildTNode @select--执行上面定义的存储过程,并传入父节点参数
select * from #temp--递归完成后,选择所有子节点数据
我用的是sqlserver数据库,如果你不是数据库的话,再来探索下,我只是做了存储过程,我相信C#代码还是和这个类似吧!希望对你有帮助
CREATE proc getChildTNode
@selectid int --这里是传入一个你选择的节点id
as
declare @id int--声明了一个游标变量id
insert #temp select * from tree where parent=@selectid --先插入parent字段为选择id的所有子节点
declare MyCursor cursor local for select [id] from tree where parent=@selectid--声明游标
open MyCursor--打开游标
fetch next from MyCursor into @id--读取下一行
while(@@fetch_status = 0)--判断,至于为什么要判断=0,就不用追究了
begin
exec getChildTNode @id --递归调用
fetch next from MyCursor into @id --将下一个节点id放进id变量作为父节点遍历
end
close MyCursor--关闭游标
deallocate MyCursor--什邡游标
这里还没有完,还有以下调用上面这个存储过程
CREATE proc getChildTNodes
@select int--同上面的定义一个父节点变量
as
create table #temp(
[id] int,
title varchar(50),
parent int,
)--建立一个临时表
exec getChildTNode @select--执行上面定义的存储过程,并传入父节点参数
select * from #temp--递归完成后,选择所有子节点数据
我用的是sqlserver数据库,如果你不是数据库的话,再来探索下,我只是做了存储过程,我相信C#代码还是和这个类似吧!希望对你有帮助
全部回答
- 1楼网友:长青诗
- 2021-01-23 23:26
递归就是 调用自身函数进行遍历. 很简单的 想想就写出来了
- 2楼网友:鱼芗
- 2021-01-23 22:27
树的遍历要用递归方便,
建树时先用递归遍历到一节点后再新建节点。追问可以给我发个例子么??谢谢了追答没例子,百度上搜一下,会有现成答案的
建树时先用递归遍历到一节点后再新建节点。追问可以给我发个例子么??谢谢了追答没例子,百度上搜一下,会有现成答案的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯