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 相关文章推荐
Windows中安装Apache2和PHP4权威指南
Nov 18 PHP
php 分页函数multi() discuz
Jun 21 PHP
phpmyadmin导入(import)文件限制的解决办法
Dec 11 PHP
php使用curl抓取qq空间的访客信息示例
Feb 28 PHP
php无限遍历文件夹示例分享
Mar 04 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
Jun 22 PHP
php判断两个日期之间相差多少个月份的方法
Jun 18 PHP
深入php内核之php in array
Nov 10 PHP
浅谈PHP eval()函数定义和用法
Jun 21 PHP
Zend Framework框架实现类似Google搜索分页效果
Nov 25 PHP
php数据序列化测试实例详解
Aug 12 PHP
php7 list()、session及其他模块的修改实例分析
May 25 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微信支付之APP支付方法
2015/03/04 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
javascript实现unicode和字符的互相转换
2007/07/18 Javascript
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
微信小程序 详解Page中data数据操作和函数调用
2017/01/12 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
JavaScript实现简单轮播图效果
2018/12/01 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
2019/09/11 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
python读文件逐行处理的示例代码分享
2013/12/27 Python
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
改进Django中的表单的简单方法
2015/07/17 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
python下载库的步骤方法
2019/10/12 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
基于python实现复制文件并重命名
2020/09/16 Python
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
法国春天百货官网:Printemps.com
2020/06/29 全球购物
幼儿园教师教学反思
2014/02/06 职场文书
新教师岗前培训方案
2014/06/05 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
小学教师师德师风自我剖析材料
2014/09/29 职场文书
道德模范事迹材料
2014/12/20 职场文书
新人入职感言
2015/07/31 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android