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 相关文章推荐
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
Sep 22 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
一个简单的php MVC留言本实例代码(必看篇)
Sep 22 PHP
PHP图片添加水印功能示例小结
Oct 03 PHP
PHP实现二维数组根据key进行排序的方法
Dec 30 PHP
PHP批量删除jQuery操作
Jul 23 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
Oct 07 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
Oct 17 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 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
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
实用函数10
2007/11/08 PHP
PHP 开源框架22个简单简介
2009/08/24 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
5款Javascript颜色选择器
2009/10/25 Javascript
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
jquery 的 $("#id").html() 无内容的解决方法
2010/06/07 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
js实现简易ATM功能
2020/10/27 Javascript
Python Property属性的2种用法
2015/06/21 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
举例讲解Python常用模块
2019/03/08 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
python取均匀不重复的随机数方式
2019/11/27 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
html5实现滑块功能之type="range"属性
2020/02/18 HTML / CSS
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
一份软件工程师的面试试题
2016/02/01 面试题
法院实习人员自我鉴定
2013/09/26 职场文书
招聘单位介绍信
2014/01/14 职场文书
2014年后勤工作总结
2014/11/18 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
Ajax异步刷新功能及简单案例
2021/11/20 Javascript