PHP基于非递归算法实现先序、中序及后序遍历二叉树操作示例

作者:重口味AC 时间:2023-08-16 04:46:47 

本文实例讲述了PHP基于非递归算法实现先序、中序及后序遍历二叉树操作。分享给大家供大家参考,具体如下:

概述:

二叉树遍历原理如下:

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
  • asp之家 网络编程 m.aspxhome.com