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 相关文章推荐
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 PHP
php递归实现无限分类生成下拉列表的函数
Aug 08 PHP
php生成静态文件的多种方法分享
Jul 17 PHP
深入eAccelerator与memcached的区别详解
Jun 06 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
Jun 13 PHP
Thinkphp多文件上传实现方法
Oct 31 PHP
php支持中文字符串分割的函数
May 28 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 PHP
php倒计时出现-0情况的解决方法
Jul 28 PHP
实例分析PHP中PHPMailer发邮件
Dec 13 PHP
PHP下载文件函数与用法示例
Sep 27 PHP
PHP使用PDO 连接与连接管理操作实例分析
Apr 21 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
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
php发送post请求的三种方法
2014/02/11 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
ThinkPHP验证码使用简明教程
2014/03/05 PHP
非常实用的php验证码类
2016/05/15 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
jQuery循环动画与获取组件尺寸的方法
2015/02/02 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
2015/02/17 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
vue前后分离调起微信支付
2019/07/29 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
浅析python打包工具distutils、setuptools
2018/04/20 Python
Python函数参数操作详解
2018/08/03 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
比利时香水网上商店:NOTINO
2018/03/28 全球购物
介绍一下except的用法和作用
2015/01/22 面试题
应聘收银员个人的求职信
2013/11/30 职场文书
幼儿园元旦活动感言
2014/03/02 职场文书
入股协议书范本
2014/11/01 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
高中班长竞选稿
2015/11/20 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书