锁定老帖子 主题:java树形结构 算法
精华帖 (2) :: 良好帖 (8) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-01
zhanglun1225 写道 andsofish 写道 还有一个问题:你的id是自增长编号么?
如何保证,between lft 和 rgt 不会包含兄弟的子节点啊? 1 / \ 2 3 / \ / 4 5 6 / 7 2节点的lft和rgt分别是? 这个id是数据库的主键,不一定是自动增长的,根据自己选择的数据库类型来定,只要唯一就可以了。 “如何保证,between lft 和 rgt 不会包含兄弟的子节点啊?”这个问题,查询的sql语句我已经给出来了,你可以测试一下。 1 A 14 / \ 2 B 9 10 C 13 / \ \ 3 D 6 7 E 8 11 F 12 / 4 G 5 其中A、B、C等字母代表节点,而数字分别代表lft和rgt,比如A的lft=1,rgt=14 谢谢,我基本看懂了 新的问题 1 A 14 / \ 2 B 9 10 C 13 / \ \ 3 D 6 7 E 8 11 F 12 / 4 G 5 我要为G增加一个兄弟,按照增加算法,增加后为 1 A 16 / \ 2 B 11 12 C 15 / \ \ 3 D 8 9 E 10 13 F 14 / \ 6 G 7 4 X 5 遍历路径似乎不太对了吧。 也许还是我对LFT何RGT的由来有点疑问导致的,到底这两个值是如何计算出来的? 是通过前序遍历算法得来的么? |
|
返回顶楼 | |
发表时间:2010-03-01
最后修改:2010-03-01
新的问题
1 A 14 / \ 2 B 9 10 C 13 / \ \ 3 D 6 7 E 8 11 F 12 / 4 G 5 我要删除B,按照增加算法,删除后为 1 A 12 / \ 8 C 11 / \ \ 1 D 4 5 E 6 9 F 10 / 2 G 3 不知是否可以删除树枝? 从sql查询来看,还是满足条件的,但是二叉树被破坏了。 |
|
返回顶楼 | |
发表时间:2010-03-01
left / right 如何维护?
|
|
返回顶楼 | |
发表时间:2010-03-02
1 A 14
/ \ 2 B 9 10 C 13 / \ \ 3 D 6 7 E 8 11 F 12 / 4 G 5 这样的树形结构是怎么生成的? 以你的算法生成树应该是 1 A 6 / \ 4 B 4 2 C 3 才对 |
|
返回顶楼 | |
发表时间:2010-03-02
andsofish 写道 zhanglun1225 写道 andsofish 写道 还有一个问题:你的id是自增长编号么?
如何保证,between lft 和 rgt 不会包含兄弟的子节点啊? 1 / \ 2 3 / \ / 4 5 6 / 7 2节点的lft和rgt分别是? 这个id是数据库的主键,不一定是自动增长的,根据自己选择的数据库类型来定,只要唯一就可以了。 “如何保证,between lft 和 rgt 不会包含兄弟的子节点啊?”这个问题,查询的sql语句我已经给出来了,你可以测试一下。 1 A 14 / \ 2 B 9 10 C 13 / \ \ 3 D 6 7 E 8 11 F 12 / 4 G 5 其中A、B、C等字母代表节点,而数字分别代表lft和rgt,比如A的lft=1,rgt=14 谢谢,我基本看懂了 新的问题 1 A 14 / \ 2 B 9 10 C 13 / \ \ 3 D 6 7 E 8 11 F 12 / 4 G 5 我要为G增加一个兄弟,按照增加算法,增加后为 1 A 16 / \ 2 B 11 12 C 15 / \ \ 3 D 8 9 E 10 13 F 14 / \ 6 G 7 4 X 5 遍历路径似乎不太对了吧。 也许还是我对LFT何RGT的由来有点疑问导致的,到底这两个值是如何计算出来的? 是通过前序遍历算法得来的么? 这个遍历路径是不准确了。不过,这个算法是在新闻发布栏目树里面用到的,只是方便N层栏目的查询,而得到的数据,我们可以根据别的字段来进行排序,达到想要的结果。如果再去考虑遍历的路径,个人觉得有点多余了。 不过您提到的问题,值得思考。谢谢 |
|
返回顶楼 | |
发表时间:2010-03-02
andsofish 写道 新的问题
1 A 14 / \ 2 B 9 10 C 13 / \ \ 3 D 6 7 E 8 11 F 12 / 4 G 5 我要删除B,按照增加算法,删除后为 1 A 12 / \ 8 C 11 / \ \ 1 D 4 5 E 6 9 F 10 / 2 G 3 不知是否可以删除树枝? 从sql查询来看,还是满足条件的,但是二叉树被破坏了。 这个不是纯粹的算法,只是为了方便我们项目的一个工具,在项目中栏目树不能删除树枝,所以暂时未加考虑。。呵呵。不好意思。 不过您提出的问题,值得思考。。 |
|
返回顶楼 | |
发表时间:2010-03-03
受用了..
|
|
返回顶楼 | |
发表时间:2010-03-03
加一个字段orders ,平级排序,记录上级ID,记录子级所有ID, 一条SQL搞定。不用规递
|
|
返回顶楼 | |
发表时间:2010-03-18
最后修改:2010-03-18
我的算法是用节点深度加parentID解决
01 0101 010101 0102 02 0201 020101 中等数据规模,100级以下 |
|
返回顶楼 | |
发表时间:2010-06-08
我要是想显示树形列表 sql 又该如何书写 ?
如: 根目录 目录1 目录2 目录2.1 |
|
返回顶楼 | |