仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1885|回复: 20
打印 上一主题 下一主题

[学习教程] PHP网页编程之php:树形布局的算法 3

[复制链接]
萌萌妈妈 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:53:14 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
多个成员之间重复做相同的工作,很容易因为交流沟通的时候没有进行一致性的文档要求而出现不明错误,严重影响开发进度,导致在预定时间内无法完成该项目或者完成的项目跟原先计划所要实现的项目功能不符合。       那末关于如许的布局咱们该若何增添,更新和删除一个节点呢? 增添一个节点普通有两种办法:
   
  保存原本的name 和parent布局,用老办法向数据中添加数据,每增添一条数据今后利用rebuild_tree函数对全部布局从头停止一次编号。
  效力更高的举措是改动一切位于新节点右边的数值。举例来讲:咱们想增添一种新的生果"Strawberry"(草莓)它将成为"Red"节点的最初一个子节点。起首咱们需求为它腾出一些空间。"Red"的右值应该从6改成8,"Yellow 7-10 "的摆布值则应该改成 9-12。 顺次类推咱们可以得知,假如要给新的值腾出空间需求给一切摆布值大于5的节点 (5 是"Red"最初一个子节点的右值) 加上2。 所以咱们如许停止数据库操作:
   
  UPDATE tree SET rgt=rgt+2 WHERE rgt>5;
  UPDATE tree SET lft=lft+2 WHERE lft>5;
  如许就为新拔出的值腾出了空间,如今可以在腾出的空间里创立一个新的数据节点了, 它的摆布值分离是6和7
   
  INSERT INTO tree SET lft=6, rgt=7, name='Strawberry';
   
  再做一次查询看看吧!怎样?很快吧。
  好了,如今你可以用两种分歧的办法设计你的多级数据库布局了,采取何种体例完整取决于你团体的判别,然而关于条理多半量大的布局我更喜好第二种办法。假如查询量较小然而需求频仍添加和更新的数据,则第一种办法更加简捷。
   
  别的,假如数据库撑持的话 你还可以将 rebuild_tree() 和 腾出空间的操作写成数据库真个触发器函数, 在拔出和更新的时分主动履行, 如许可以失掉更好的运转效力, 并且你添加新节点的SQL语句会变得加倍复杂。
  类递归法
  Posted by 访客 on 2004, May 31 - 9:18am.
  我用类 递归法 写了段法式,跟文章中的递归不完整一样
  正筹办移植到 xoops 中:
  http://dev.xoops.org/modules/xfmod/project/?ulink
   
  已呈现内存溢呈现象
  不外筹办持续采取递归法,只是需求持续改善
   
  但愿无机会跟列位会商cms
  
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-19 15:44

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表