PHP基于非递归算法实现先序、中序及后序遍历二叉树操作示例
作者:重口味AC 时间:2023-08-16 04:46:47
本文实例讲述了PHP基于非递归算法实现先序、中序及后序遍历二叉树操作。分享给大家供大家参考,具体如下:
概述:
二叉树遍历原理如下:
针对上图所示二叉树遍历:
1. 前序遍历:先遍历根结点,然后遍历左子树,最后遍历右子树。
ABDHECFG
2.中序遍历:先遍历左子树,然后遍历根结点,最后遍历右子树。
HDBEAFCG
3.后序遍历:先遍历左子树,然后遍历右子树,最后遍历根节点。
HDEBFGCA
实现方法:
先序遍历:利用栈先进后出的特性,先访问根节点,再把右子树压入,再压入左子树。这样取出的时候是先取出左子树,最后取出右子树。
function preorder($root){
$stack = array();
array_push($stack, $root);
while(!empty($stack)){
$center_node = array_pop($stack);
echo $center_node->value; // 根节点
if($center_node->right != null)
array_push($stack, $center_node->right); // 压入右子树
if($center_node->left != null)
array_push($stack, $center_node->left); // 压入左子树
}
}
中序:需要从下向上遍历,所以先把左子树压入栈,然后逐个访问根节点和右子树。
function inorder($root){
$stack = array();
$center_node = $root;
while(!empty($stack) || $center_node != null){
while($center_node != null){
array_push($stack, $center_node);
$center_node = $center_node->left;
}
$center_node = array_pop($stack);
echo $center_node->value;
$center_node = $center_node->right;
}
}
后序:先把根节点存起来,然后依次储存左子树和右子树。然后输出。
function tailorder($root){
$stack = array();
$outstack = array();
array_push($$stack, $root);
while($empty($stack)){
$center_node = array_pop($stack);
array_push($outstack, $center_node);
if($center_node->right != null)
array_push($stack, $center_node->right);
if($center_node->left != null)
array_push($stack, $center_node->left);
}
while($empty($outstack)){
$center_node = array_pop($outstack);
echo $center_node->value;
}
}
希望本文所述对大家PHP程序设计有所帮助。
来源:http://blog.csdn.net/acingdreamer/article/details/70377864
标签:PHP,遍历二叉树
0
投稿
猜你喜欢
详谈Python中列表list,元祖tuple和numpy中的array区别
2021-02-04 12:14:28
python实现人机五子棋
2022-06-15 08:07:49
mysql installer community 8.0.12.0安装图文教程
2024-01-15 05:16:33
如何设计注册激活邮件
2010-01-12 13:14:00
python 模拟登陆163邮箱
2021-08-03 09:30:11
Python+OpenCV实现图片及视频中选定区域颜色识别
2021-04-10 03:36:26
python在html中插入简单的代码并加上时间戳的方法
2022-06-19 05:33:01
详解Python下ftp上传文件linux服务器
2023-12-31 19:02:37
从web到内网渗透的一次过程详解
2023-05-20 21:23:08
javascript ImgBox透明遮罩层背景图片展示
2024-02-27 04:51:07
JavaScript面向对象中的封装和继承你了解吗
2024-06-07 16:00:16
pyecharts绘制中国2020肺炎疫情地图的实例代码
2022-08-18 08:02:44
Django和Ueditor自定义存储上传文件的文件名
2021-02-26 02:43:17
python ftp 按目录结构上传下载的实现代码
2021-01-28 00:38:33
TensorFlow tf.nn.max_pool实现池化操作方式
2021-08-20 20:36:45
Python turtle绘画象棋棋盘
2022-05-06 22:48:55
详解python实现邮件解析的方法
2023-02-19 04:03:20
Flask框架Flask-Login用法分析
2022-05-20 08:21:27
jmeter正则表达式实例详解
2023-05-20 09:12:12
python去除所有html标签的方法
2021-02-23 20:49:00