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中使用CURL伪造来路抓取页面或文件
May 04 PHP
php基础教程 php内置函数实例教程
Aug 21 PHP
采用memcache在web集群中实现session的同步会话
Jul 05 PHP
PHP模拟asp.net的StringBuilder类实现方法
Aug 08 PHP
Yii2.0中的COOKIE和SESSION用法
Aug 12 PHP
PHP快速排序quicksort实例详解
Sep 28 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
Jul 03 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
Sep 18 PHP
PHP模型Model类封装数据库操作示例
Mar 14 PHP
php pdo连接数据库操作示例
Nov 18 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表单数据写入MySQL数据库的代码
2016/05/31 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
javascript编程起步(第五课)
2007/01/10 Javascript
Prototype中dom对象方法汇总
2008/09/17 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
Vue实现日历小插件
2019/06/26 Javascript
微信小程序 授权登录详解(附完整源码)
2019/08/23 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
python单链表实现代码实例
2013/11/21 Python
Python中正则表达式的用法实例汇总
2014/08/18 Python
Python多线程爬虫简单示例
2016/03/04 Python
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
python文件绝对路径写法介绍(windows)
2019/12/25 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
离退休人员聘用协议书
2014/11/24 职场文书
小学感恩节活动总结
2015/03/24 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
Ajax异步刷新功能及简单案例
2021/11/20 Javascript
利用JavaScript写一个简单计算器
2021/11/27 Javascript
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android