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 相关文章推荐
简单采集了yahoo的一些数据
Feb 14 PHP
彻底杜绝PHP的session cookie错误
Aug 09 PHP
PHP中将网页导出为Word文档的代码
May 25 PHP
屏蔽机器人从你的网站搜取email地址的php代码
Nov 14 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
May 19 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
Jul 13 PHP
浅谈mysql_query()函数的返回值问题
Sep 05 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
thinkphp中的多表关联查询的实例详解
Oct 12 PHP
php7 新增功能实例总结
May 25 PHP
实例讲解PHP表单
Jun 10 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
yii中widget的用法
2014/12/03 PHP
php实现的RSS生成类实例
2015/04/23 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
原生js实现随机点名
2020/07/05 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
vue中使用腾讯云Im的示例
2020/10/23 Javascript
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
python中模块的__all__属性详解
2017/10/26 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
python绘制地震散点图
2019/06/18 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
美国专注于健康商品的网站:eVitamins
2017/01/23 全球购物
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
2014年自我评价
2014/01/04 职场文书
优秀村官事迹材料
2014/01/10 职场文书
yy结婚证婚词
2014/01/10 职场文书
升旗仪式主持词
2014/03/19 职场文书
我爱读书演讲稿
2014/05/07 职场文书
总经理检讨书
2014/09/15 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python
详解MySQL的内连接和外连接
2023/05/08 MySQL