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获取某个目录大小的代码
Sep 10 PHP
PHP 变量的定义方法
Jan 26 PHP
php 在文件指定行插入数据的代码
May 08 PHP
PHP查询MySQL大量数据的时候内存占用分析
Jul 22 PHP
在项目中寻找代码的坏命名
Jul 14 PHP
php广告加载类用法实例
Sep 23 PHP
PHP代码实现爬虫记录――超管用
Jul 31 PHP
PHP的Yii框架入门使用教程
Feb 15 PHP
php + nginx项目中的权限详解
May 23 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
php文件操作之文件写入字符串、数组的方法分析
Apr 15 PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 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
基于mysql的bbs设计(三)
2006/10/09 PHP
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
ionic环境配置及问题详解
2017/06/27 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
JavaScript实现左侧菜单效果
2017/12/14 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
python计算最大优先级队列实例
2013/12/18 Python
分析python服务器拒绝服务攻击代码
2014/01/16 Python
wxPython中listbox用法实例详解
2015/06/01 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
windows10系统中安装python3.x+scrapy教程
2016/11/08 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
Tech21美国/加拿大:英国NO.1防摔保护壳品牌
2018/01/20 全球购物
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
Electric官网:美国高级眼镜和配件品牌
2020/06/04 全球购物
专业实习自我鉴定
2013/10/29 职场文书
应届生护士求职信
2013/11/01 职场文书
小区门卫工作职责
2013/12/14 职场文书
工作违纪检讨书
2014/02/17 职场文书
财务会计自荐信范文
2014/02/21 职场文书
品牌宣传方案
2014/03/21 职场文书
党员读书活动心得体会
2016/01/14 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
2019新员工心得体会
2019/06/25 职场文书