快速业务通道

php:树形结构的算法

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
法需要进行比较大的改进才能适应,而递归的方法则应用自如,所以在这种情况下,递归的适应性较强。这是当然的了,因为递归的方法就是链表的一种形式,树、图都可以用链表来表达,当然适应力强了。

5、直观,如果不用程序操作,直接观察数据库中存储的数据的话,显然递归方式下存储的数据比较直观,而预排序树的数据很难直接阅读(针对层次关系来说),这在数据交换中是不是会有影响呢?

  总体来说,我个人比较喜欢用递归的方法,但一直担心递归对效率的影响,所幸还没有接触过规模较大的分类层次,递归用数组替代堆栈会是一种比较好的改进方法。而预排序树不失为一种解决简单树的高效方法,用习惯了,也应该是非常出色的,尤其是它从叶子节点到根节点的反向查找非常方便。

Fwolf
www.fwolf.com
» reply to this comment
非常高兴看到你的回复
Posted by shuke on 2004, March 18 - 5:47am.
非常高兴你这么认真的读完这篇文章。这篇文章其实是原来发表在sitepoint.com上的,我把它翻译了一下,希望给希望初学入门的朋友介绍一些方法,抛砖引玉。你的方法也很好,有机会我会试一下的。(如果你有兴趣的话,何不就上面的例子把你的方法和具体实现的代码也写成教程发出来吧,这样大家就用更加实际的例子来模仿了)如果你对数据库中保存多级结构有兴趣研究的话,这里还有两个连接也很不错可以作为参考:
介绍了常见的4中方法
一次查询,数组排序的脚本我想你的脚本肯定比这个强。
另外我看到你也用drupal,它还有一个高级功能叫分布式用户验证系统,只要在任何一个drupal的站点注册以后就可以登录访问其它的drupal站点了。挺有意思的。
祝好!
» reply to this comment
用循环来建树已经实现了
Posted by 访客 on 2004, March 25 - 10:10pm.
你上次提供的资料我已经都看过了,不过老实说,第一篇文章里没有太多新东西,或许是我没看太明白吧,第二个居然是PHP3写的,程序结构没有细看,用到太多的函数交叉。
正好我在一个系统中用户角色要用到分级,按照数组的思路就把遍历写了下来,没有时间整理,先放到这里你看看吧,数据库用的是ADODB,程序是直接从系统中摘出来的,希望能够描述得清楚,主要是利用了PHP强大的数组操作,用循环来进行递归。注释里是一种相近的方法,只是处理结果的时机不同而已。

<?php
/**
* 显示列表
* @access public
*/
function DispList()
{
//不缩进的显示方式
// $this->mIsDispListIndex = true;
// echo(''<p align="right"><a href="?action=new&part=role">增加新角色</a>  </p>''); _fcksavedurl=""?action=new&part=role">增加新角色</a>  </p>'');"
//
// $this->mListTitle = "用户角色列表";
// $this->SetDataOption(''list'');
//
// $this->SetQueryTable( array($this->mTableUserRole) );
//
// //查询顺序
// $this->SetQueryOrder( ''asc'', $this->mTableUserRole, ''sequence'' );
//
// $this->Query(''list'');
// parent::DispList();

// //另外一种显示方式,用数组作为堆栈,A: 压栈时存role,压完就删除source
// $this->CheckProperty(''mrDb'');
// $this->CheckProperty(''mrSql'');
// $this->mrSql->Select(''role, title, parent'');
// $this->mrSql->From($this->mTableUserRole);
// $this->mrSql->Orderby(''parent, sequence'');
// $this->mRs = $this->mrDb->Execute($this->mrSql->Sql());
// if (0 < count($this->mRs))
// {
// $source = & $this->mRs->GetArray(); //数字索引
// $stack = array(''''); /

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号