改性序树遍历 - 找到下一个节点
问题描述:
我有这样的数据:改性序树遍历 - 找到下一个节点
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
答
有了你给我只能建议是尝试的信息:
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
您好, Pondidum。我已经更新了这个问题。 – matte 2009-12-05 22:00:08