PHP实现二叉树的深度优先与广度优先遍历方法


Posted in PHP onSeptember 28, 2015

本文实例讲述了PHP实现二叉树的深度优先与广度优先遍历方法。分享给大家供大家参考。具体如下:

#二叉树的广度优先遍历
#使用一个队列实现
class Node {
 public $data = null;
 public $left = null;
 public $right = null;
}
#@param $btree 二叉树根节点
function breadth_first_traverse($btree) {
 $traverse_data = array();
 $queue = array();
 array_unshift($queue, $btree); #根节点入队
 while (!empty($queue)) { #持续输出节点,直到队列为空
   $cnode = array_pop($queue); #队尾元素出队
   $traverse_data[] = $cnode->data;
   #左节点先入队,然后右节点入队
   if ($cnode->left != null) array_unshift($queue, $cnode->left);
   if ($cnode->right != null) array_unshift($queue, $cnode->right);
 }
 return $traverse_data;
}
#深度优先遍历,使用一个栈实现
function depth_first_traverse($btree) {
$traverse_data = array();
$stack = array();
array_push($stack, $btree);
while (!empty($stack)) {
  $cnode = array_pop($stack);
  $traverse_data[] = $cnode->data;
  if ($cnode->right != null) array_push($stack, $cnode->right);
  if ($cnode->left != null) array_push($stack, $cnode->left);
}
return $traverse_data;
}
$root = new Node();
$node1 = new Node();
$node2 = new Node();
$node3 = new Node();
$node4 = new Node();
$node5 = new Node();
$node6 = new Node();
$root->data = 1;
$node1->data = 2;
$node2->data = 3;
$node3->data = 4;
$node4->data = 5;
$node5->data = 6;
$node6->data = 7;
$root->left = $node1;
$root->right = $node2;
$node1->left = $node3;
$node1->right = $node4;
$node2->left = $node5;
$node2->right = $node6;
$traverse = breadth_first_traverse($root);
print_r($traverse);
echo "";
$traverse = depth_first_traverse($root);
print_r($traverse);

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
SMARTY学习手记
Jan 04 PHP
PHP 动态随机生成验证码类代码
Apr 09 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
Dec 05 PHP
Laravel框架数据库CURD操作、连贯操作总结
Sep 03 PHP
smarty模板引擎中自定义函数的方法
Jan 22 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
PHP面向对象之后期静态绑定功能介绍
May 18 PHP
使用PHP生成图片的缩略图的方法
Aug 18 PHP
PHP中危险的file_put_contents函数详解
Nov 04 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
Sep 05 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
Sep 18 PHP
PHP7 整型处理机制修改
Mar 09 PHP
PHP+AJAX实现投票功能的方法
Sep 28 #PHP
WIFI万能钥匙密码查询接口实例
Sep 28 #PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 #PHP
培养自己的php编码规范
Sep 28 #PHP
ThinkPHP数据操作方法总结
Sep 28 #PHP
ThinkPHP表单数据智能写入create方法实例分析
Sep 27 #PHP
PHP+MySQL之Insert Into数据插入用法分析
Sep 27 #PHP
You might like
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
基于PHP制作验证码
2016/10/12 PHP
js计数器代码
2006/11/04 Javascript
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
实例介绍Python中整型
2019/02/11 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
Python Django基础二之URL路由系统
2019/07/18 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
详解Python设计模式之策略模式
2020/06/15 Python
Python通过format函数格式化显示值
2020/10/17 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
使用CSS3中的calc()属性来以算式表达尺寸数值
2016/06/06 HTML / CSS
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
JAVA代码查错题
2014/10/10 面试题
土建资料员岗位职责
2014/01/04 职场文书
车间机修工岗位职责
2014/02/28 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
工作年限证明范本
2015/06/15 职场文书