递归高手请进,遍历三叉树,急,在线等!!

loveasp007 2005-08-30 01:00:40
数据表结构:

lmid(用户ID) prentid(父ID) type(栏目位置) prentlist(节点列表)

首页000
公司概况001 首页000 左边 首页
产品展示002 首页000 中间 首页
联系我们003 首页000 右边 首页
公司简介004 公司概况001 左边 首页,公司概况
公司位置005 公司简介004 左间 首页,公司概况,公司简介
位置正文006 公司位置005 左边 首页,公司概况,公司简介,公司位置
产品一 007 产品展示002 中间 首页,产品展示
产品二 008 产品展示002 左边 首页,产品展示
联系电话009 联系我们003 右边 首页,联系我们


要求:


实现自动的《网站地图》,

用表格隔开各栏目,每个栏目下默认是三个栏目,没有的暂空。。按层次依次读出。生成像下面的图示。(为方便大家看,我用数字表示)。

000

001(左) 002(中) 003(右)

004(左) 008(左) 007(中) 009(右)

005(左)

006(右)



我的实现方法:

我用递归遍历N叉树来写的,我只用表里的lmid和prentid这2个字段来实现的,,但只能实现像目录树这样的效果,不能实现上图那样的效果,请高手帮看看!或有没有更好的方法。。用asp代码应该怎么写。。
...全文
245 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzhiyuan 2005-08-30
  • 打赏
  • 举报
回复
数据库表如下:
id name pid pos
1 首页 NULL NULL
2 公司简介 1 left
3 简介正文 2 left
4 公司地址 2 center
5 公司电话 2 right
6 产品中心 1 center
7 产品左 6 left
8 产品中 6 center
9 新闻中心 1 right
10 新闻左 9 left
11 新闻右 9 right

asp递归取得子表的程序如下
function getChildrenTable(pid)
dim str,rs
Response.Write "<table border=1>"
sql="select name from sort where id="&pid
set rs=conn.Execute(sql)
'表头
Response.Write "<tr><td colspan=3>"& rs("name") &"</td></tr><tr>"

'左子表
Response.Write "<td>"
sql="select id,name from sort where pid=" & pid & " and pos='left'"
set rs=conn.Execute(sql)
if not rs.eof then
Response.Write getChildrenTable(rs("id"))
end if
Response.Write "</td>"

'中间子表
Response.Write "<td>"
sql="select id,name from sort where pid=" & pid & " and pos='center'"
set rs=conn.Execute(sql)
if not rs.eof then
Response.Write getChildrenTable(rs("id"))
end if
Response.Write "</td>"

'右子表
Response.Write "<td>"
sql="select id,name from sort where pid=" & pid & " and pos='right'"
set rs=conn.Execute(sql)
if not rs.eof then
Response.Write getChildrenTable(rs("id"))
end if
Response.Write "</td>"

Response.Write "</tr></table>"
end function

getChildrenTable(1)

以上写法逻辑上比较清楚;若想写法上更简洁,则可以将得到子表的语句写成函数;若想执行效率更高,则可以左中右三条记录一块读出来.
wzhiyuan 2005-08-30
  • 打赏
  • 举报
回复
你是说任一个节点,如果它有子节点的话,只有三个(左中右)?
实现你的要求很简单,表格嵌套,用递归输出子节点时输出一个一行三列的表格即可
aassdd 2005-08-30
  • 打赏
  • 举报
回复
不用递归用两次循环,FOR 1 TO 1000
再里层判断左。中。右

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧