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 相关文章推荐
php&java(三)
Oct 09 PHP
PHP执行速率优化技巧小结
Mar 15 PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 PHP
深入Apache与Nginx的优缺点比较详解
Jun 17 PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 PHP
php查询ip所在地的方法
Dec 05 PHP
ThinkPHP开发框架函数详解:C方法
Aug 14 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
Aug 15 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
Laravel框架文件上传功能实现方法示例
Apr 16 PHP
Laravel框架自定义公共函数的引入操作示例
Apr 16 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 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中的Streams工具
2015/07/03 PHP
PHP实现表单提交时去除斜杠的方法
2016/12/26 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
javascript 操作符(~、&、|、^、)使用案例
2014/12/31 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
python处理csv数据的方法
2015/03/11 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
详解Python中的动态属性和特性
2018/04/07 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
2014年干部培训工作总结
2014/12/17 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
mysq启动失败问题及场景分析
2021/07/15 MySQL
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS