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 配置文件中open_basedir选项作用
Jul 19 PHP
利用php实现禁用IE和火狐的缓存问题
Dec 03 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
Jun 17 PHP
yii框架通过控制台命令创建定时任务示例
Apr 30 PHP
php实现遍历目录并删除指定文件中指定内容
Jan 21 PHP
php实现简单文件下载的方法
Jan 30 PHP
PHP 魔术变量和魔术函数详解
Feb 25 PHP
Symfony模板的快捷变量用法实例
Mar 17 PHP
php批量修改表结构实例
May 24 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
May 28 PHP
PHP实现SMTP邮件的发送实例
Sep 27 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 SQLite类
2009/05/07 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
2016/09/18 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
2017/12/26 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
python每次处理固定个数的字符的方法总结
2013/01/29 Python
Python格式化css文件的方法
2015/03/10 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
Python sep参数使用方法详解
2020/02/12 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
html5视频自动横过来自适应页面且点击播放功能的实现
2020/06/03 HTML / CSS
物流管理毕业生自荐信范文
2014/03/15 职场文书
公司授权委托书范本
2014/04/03 职场文书
民事和解协议书格式
2014/11/29 职场文书
2016同学毕业寄语大全
2015/12/04 职场文书
导游词之天津盘山
2019/11/01 职场文书