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 相关文章推荐
PHPShop存在多个安全漏洞
Oct 09 PHP
多php服务器实现多session并发运行
Oct 09 PHP
模仿OSO的论坛(一)
Oct 09 PHP
关于zend studio 出现乱码问题的总结
Jun 23 PHP
php结合ajax实现赞、顶、踩功能实例
May 12 PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 PHP
PHP实现简单搜歌的方法
Jul 28 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
Aug 10 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
PHP中用Trait封装单例模式的实现
Dec 18 PHP
PHP+Mysql分布式事务与解决方案深入理解
Feb 27 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数据库的查询统计速度 select 索引应用
2007/04/11 PHP
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
你必须知道的Javascript知识点之"this指针"的应用
2013/04/23 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
2017/03/30 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
react基本安装与测试示例
2020/04/27 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
2020/07/19 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
python进程管理工具supervisor使用实例
2014/09/17 Python
Python实现的数据结构与算法之队列详解
2015/04/22 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
Python import与from import使用及区别介绍
2018/09/06 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
阿迪达斯墨西哥官方网站:adidas墨西哥
2017/11/03 全球购物
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
Java程序员综合测试题
2014/04/25 面试题
护理专业自荐信
2013/12/03 职场文书
日语专业求职信
2014/07/04 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
植物生产学专业求职信
2014/08/08 职场文书
授权委托书样本
2014/09/25 职场文书
javascript的setTimeout()使用方法总结
2021/11/20 Javascript
Python列表的索引与切片
2022/04/07 Python