求递归遍历算法,请高手赐教!

来灵 2008-11-19 10:06:48
现有一张数据表,如下,pre_id和rear_id是任务的id,

假如任务11806是一节点,那么它有4个关联节点,11811,11810,11808,11807.....这些任务之间存在一种数据结构,
现在要遍历访问,将这些任务相关信息显示在一列表框中,打算用递归算法来实现,但是想了好长时间没有想出好的办法,求助大虾赐教,谢谢!


pre_id rear_id

11806 11811
11806 11810
11806 11808
11806 11807
11808 11809
11810 11813
11811 11812
11811 11820
11811 11823
...全文
138 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
来灵 2008-11-21
  • 打赏
  • 举报
回复
帖子加分默认100,呵呵
来灵 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dlyme 的回复:]
比方说,你可以用Ado中的Recordset对象来存储这个记录集。
遍历的时候从第一条记录开始,一条条MoveNext,通过EOF来判断遍历是否完成。
[/Quote]

非常感谢,借用你的算法,我已经先后使用数组和链表实现了我的遍历。再加30分,结帖!
  • 打赏
  • 举报
回复
比方说,你可以用Ado中的Recordset对象来存储这个记录集。
遍历的时候从第一条记录开始,一条条MoveNext,通过EOF来判断遍历是否完成。
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chexlong 的回复:]
To dlyme: Thank you!

现在关键问题是“for each rs in recordset”,用rootID查出一组rear_id后,用rear_id中的一个id开始递归,之后,可能会有新的一组rear_id,那么后来的一组id不就把上一组id覆盖掉了,可能会递归好多次(如果深度大的话)?
[/Quote]
产生新的一组rear_id的时候用一个新的记录集对象,不要把旧数据覆盖,不然全乱套了。
来灵 2008-11-20
  • 打赏
  • 举报
回复
To dlyme: Thank you!

现在关键问题是“for each rs in recordset”,用rootID查出一组rear_id后,用rear_id中的一个id开始递归,之后,可能会有新的一组rear_id,那么后来的一组id不就把上一组id覆盖掉了,可能会递归好多次(如果深度大的话)?
来灵 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dlyme 的回复:]
没用数据库吗?那就随便你了。
动态数组、链表、集合...只要能存下数据完成遍历都可以。
[/Quote]

我用的是MySql,但是现在对“for each rs in recordset”还不是很清楚,可以把这个解释一下吗?
  • 打赏
  • 举报
回复

void Visit(int rootID)
{
List1.AddItem rootID; //列表框中添加本条信息
for each rs in recordset(SELECT * FROM TABLEXX WHERE preID = rootID) //遍历表中preID字段等
//于rootID的所有记录
{
Visit(rs.rearID);
}
}
  • 打赏
  • 举报
回复
没用数据库吗?那就随便你了。
动态数组、链表、集合...只要能存下数据完成遍历都可以。
来灵 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dlyme 的回复:]
引用 4 楼 chexlong 的回复:
To dlyme: Thank you!

现在关键问题是“for each rs in recordset”,用rootID查出一组rear_id后,用rear_id中的一个id开始递归,之后,可能会有新的一组rear_id,那么后来的一组id不就把上一组id覆盖掉了,可能会递归好多次(如果深度大的话)?

产生新的一组rear_id的时候用一个新的记录集对象,不要把旧数据覆盖,不然全乱套了。
[/Quote]


这些一组组的rear_id,我该用什么结构来储存呢?
来灵 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dlyme 的回复:]
引用 4 楼 chexlong 的回复:
To dlyme: Thank you!

现在关键问题是“for each rs in recordset”,用rootID查出一组rear_id后,用rear_id中的一个id开始递归,之后,可能会有新的一组rear_id,那么后来的一组id不就把上一组id覆盖掉了,可能会递归好多次(如果深度大的话)?

产生新的一组rear_id的时候用一个新的记录集对象,不要把旧数据覆盖,不然全乱套了。
[/Quote]


这些一组组的rear_id,我该用什么结构来储存呢?
hityct1 2008-11-20
  • 打赏
  • 举报
回复
应该是个树。先化成树,树的遍历数据结构的书上都有。即使不是二叉树,也类似
来灵 2008-11-19
  • 打赏
  • 举报
回复
C 或 C++ 版的

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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