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制作静态网站的模板框架(三)
Oct 09 PHP
从一个不错的留言本弄的mysql数据库操作类
Sep 02 PHP
php横向重复区域显示二法
Sep 25 PHP
PHP对字符串的递增运算分析
Aug 08 PHP
discuz的php防止sql注入函数
Jan 17 PHP
PHP+MYSQL会员系统的开发实例教程
Aug 23 PHP
php禁止浏览器使用缓存页面的方法
Nov 07 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
smarty内置函数section的用法
Jan 22 PHP
php采集中国代理服务器网的方法
Jun 16 PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 PHP
PHP实现验证码校验功能
Nov 16 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 变量定义方法
2009/06/14 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
javascript html 静态页面传参数
2009/04/10 Javascript
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
sails框架的学习指南
2014/12/22 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
pygame学习笔记(4):声音控制
2015/04/15 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
利用Python脚本生成sitemap.xml的实现方法
2017/01/31 Python
python学生信息管理系统(完整版)
2020/04/05 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
python如何使用腾讯云发送短信
2020/09/17 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
迅雷Cued工作心得体会
2014/01/27 职场文书
Python多线程 Queue 模块常见用法
2021/07/04 Python