改性序树遍历 - 找到下一个节点

问题描述:

我有这样的数据:改性序树遍历 - 找到下一个节点

id | parent_id | lft | rgt | name 
===================================== 
1 | 0   | 1 | 8 | abc 
2 | 3   | 5 | 6 | jkl 
3 | 1   | 2 | 3 | def 
4 | 0   | 9 | 10 | mnno 
5 | 1   | 4 | 7 | ghi 

我需要按此顺序遍历该层次结构(IDS):1> 3> 5> 2> 4

我怎样才能做到这一点?

假设我想查找node_x的下一个节点。

if (node_x_rgt - node_x_lft == 1) { 
    next_node_lft = node_x_rgt + 1; 
} else { 
    next_node_lft = node_x_lft + 1; 
} 

此公式仅适用于某些情况(节点标识1,3,5,2)。节点2的下一个节点应该是4

+0

您好, Pondidum。我已经更新了这个问题。 – matte 2009-12-05 22:00:08

有了你给我只能建议是尝试的信息:

select * from table order by id 

顺便说一句,对于ID 4 LFT和RGT列是树之外,看起来像一个错误?

btw2,如果这是作业,请标记为这样。

编辑:问题的版本2:

这些种类的树木对所有节点作为不变量(lft < rgt)。如果表中只包含1根节点,序列可以通过LFT或RGT值被检索,在这种情况下仍然LFT的伎俩(而是通过RGT替代降序不会):

select * from table order by lft 
+0

感谢rsp。其实,是的,id 4是一个单独的树。 Id 2是节点id 1的树的最后一个节点。如果我请求id 2的下一个节点,它应该给我下一棵树的第一个节点(节点id 4的树)。 – matte 2009-12-05 22:05:59

+0

如何通过id排序可以帮助我?而且这不是一个功课:) – matte 2009-12-05 22:06:39

+0

由id订购帮助问题的第一个版本,其中请求的订单是1,2,3,4,5 :-) – rsp 2009-12-05 22:09:33