宽度优先遍历算法求部门树
来源:互联网 发布:大数据具有哪些特征 编辑:程序博客网 时间:2024/05/19 22:06
CleverCode在实际的工作中,会经常遇到对部门节点,求子部门的情况,其实这用算法中的宽度优先遍历算法就可以了。
数据结构如下:
宽度优先遍历的算法,是一级一级的往查找下找,比如需要找技术部门的所有的子部门,那么先让技术部门入队列。然后让技术部门出队列,让技术部门的孩子节点测试部和php部门入队列,保存到栈中;然后在让测试部门出队列,让测试部门的孩子节点测试一组和测试二组入队列,并保存到栈中。。。。直到队列为空,那么栈里面的结果就是所有的孩子节点。
php宽度优先遍历算法如下:
/** * 获取下级部门ID * @param unknown $departmentId * @return multitype: */ public function getChildIds($departmentId) {/*{{{*/ $ids = array(); if($departmentId < 1) { return $ids; } //从表中中获取所有数据; $departments = $DataBase->queryAll('department'); if(false == is_array($departments) || count($departments) < 1) { return $ids; } //自己的孩子节点hash $allFatherHash = array(); foreach($departments as $department) { if(false == isset($allFatherHash[$department['parentid']])) { $allFatherHash[$department['parentid']] = array(); } $allFatherHash[$department['parentid']][] = $department; } //队列和栈 $queue = array($departmentId); while(count($queue) > 0) { //出队列 $tmpId = array_shift($queue); //没有孩子节点 if(false == isset($allFatherHash[$tmpId])) { continue; } $childs = $allFatherHash[$tmpId]; foreach($childs as $department) { //孩子入队列 $queue[] = $department['id']; //孩子的入栈 $ids[] = $department['id']; } } return $ids; }/*}}}*/
2 0
- 宽度优先遍历算法求部门树
- 一种 树节点宽度优先遍历算法
- 树的宽度优先遍历
- 二叉树宽度优先遍历
- 爬虫宽度优先遍历
- 网络爬虫中用到的宽度优先遍历算法
- 算法学习:图的宽度优先遍历(BFS)
- Find Bottom Left Tree Value宽度优先遍历算法详解
- poj3126,宽度优先算法
- 宽度优先搜索算法
- 图的宽度优先遍历
- 宽度优先遍历(BFS)
- 二叉树基本算法,递归非递归遍历以及求高度、宽度等
- 二叉树的宽度优先遍历(队列实现)
- 队列实现 二叉树的宽度优先遍历
- 树的广度优先遍历与深度优先遍历算法
- 图的遍历:宽度优先遍历
- 求Maximum Depth of Binary Tree 广度优先遍历算法
- base
- 神、上帝以及老天爷
- 多线程程序常见Bug剖析(上)
- 命令行执行testng的xml文件
- 初识MyBatis(如何写配置文件和简单使用)
- 宽度优先遍历算法求部门树
- Sublime Text 3 个性设置和快捷键总结
- Android Studio快捷键
- php 面试题总结
- ibatis 到 MyBatis区别
- 信息数据管理
- Shader ColorMask
- scope_identity和identity的区别
- Redis对象