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 相关文章推荐
php4的session功能评述(一)
Oct 09 PHP
PHP编程之高级技巧——利用Mysql函数
Oct 09 PHP
一些关于PHP的知识
Nov 17 PHP
ZF等常用php框架中存在的问题
Jan 10 PHP
php在线打包程序源码
Jul 27 PHP
php下将多个数组合并成一个数组的方法与实例代码
Feb 03 PHP
浅析php面向对象public private protected 访问修饰符
Jun 30 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
Django 标签筛选的实现代码(一对多、多对多)
Sep 05 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
May 06 PHP
Laravel向公共模板赋值方法总结
Jun 25 PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 04 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/01 无线电
在PHP中利用XML技术构造远程服务(上)
2006/10/09 PHP
PHP初学入门
2006/11/19 PHP
一个PHP分页类的代码
2011/05/18 PHP
php上传文件常见问题总结
2015/02/03 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
JavaScript Sort 表格排序
2009/10/31 Javascript
Javascript在IE或Firefox下获取鼠标位置的代码
2009/12/18 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
关于jQuery的inArray 方法介绍
2011/10/08 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
对Python3+gdal 读取tiff格式数据的实例讲解
2018/12/04 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
Python更新所有已安装包的操作
2020/02/13 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
四年大学自我鉴定
2014/02/17 职场文书
顶碗少年教学反思
2014/02/21 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
四年级学生期末评语
2014/12/26 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
火烧圆明园观后感
2015/06/03 职场文书
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技