网络编程
位置:首页>> 网络编程>> php编程>> PHP基于非递归算法实现先序、中序及后序遍历二叉树操作示例

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

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

标签:PHP,遍历二叉树

本文实例讲述了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

0
投稿

猜你喜欢

  • 当你在IE中点击一个Realplayer连接时,系统会自动启动Realplayer软件,不仅占用系统内存,而且在上网时Realplayer容
  • MySQL4.1以前版本服务器只能使用单一字符集,从MySQL4.1版本开始,不仅服务器能够使用多种字符集,而且在服务器、数据库、数据表、数
  • 在所有的比例中黄金分割是最能引起人的美感的,0.618被公认为最具有审美意义的比例数字。黄金分割之所以那么普遍的流行,我猜一定跟理想女人体的
  • 举例如下,一个服务器端的form 代码自动被解释成客户端代码:服务器端代码:     &l
  • 之前看到很多人一直都问CSS 中DIV垂直居中的问题,看来对此的需求还不少。现在就把我经验拿出来分享一下,希望大家鼓鼓掌。因为在 CSS 中
  • 需求背景:用户希望他登录之后,浏览器就帮他记住登录状态,这样他就不用每次进入的时候,都需要登录一次。session过期时间:如果我们没有设置
  • 为了能够使用ERWin能够进行基于MySQL数据库的物理设计,可以采用以下方法步骤(假设你已经有了一个设计好的LOGICAL MODEL):
  • 在实际工作中,无论是对数据库系统(DBMS),还是对数据库应用系统(DBAS),查询优化一直是一个热门话题。一个成功的数据库应用系统的开发,
  •  问:我想问一下我在重新装完系统以后装SQL Server2000时提示:以前某个程序安装已在计算机上创建挂起的文件操作,运行安装
  • 采集开始第一步是分析要采集的页面。使用浏览器打开要采集的页面(如:http://sports.sina.com.cn/k/2008-09-1
  • 大家都知道JAVA里最流行的是MVC模型的编程方式,如果你不知道MVC的概念,可以去网上搜索下,应该会马上找到N多资料。PHP5推出之后,也
  • 页面自动刷新代码大全,基本上所有要求自动刷新页面的代码都有,大家可以自由发挥做出完美的页面。 1)10表示间隔10秒刷 ...页面自动刷新代
  • 最近要做数据库同步,如果网上找了例子,成功,记录下来,下回再看。这个是网上找的一编文章。以下配置在本机上已经成功:实现功能:A为主服务器,B
  • MySQL从5.1开始支持event功能,类似oracle的job功能。有了这个功能之后我们就可以让MySQL自动的执行数据汇总等功能,不用
  • 可以的,看看下面的代码和说明:<%sessionID = session.SessionIDtimeout&nbs
  • 这些导航菜单来自于Dribbble网站,出自于世界各地的优秀设计师之手,涵盖了各种不同的风格,个个都非常精美。这里我将这些导航菜单展示出来,
  • 2天内的现实new文字 <%if DateDiff("d",rs("date"),date()
  • 注意,下述部分主要与DOUBLE和FLOAT列相关,原因在于浮点数的不准确本质。MySQL使用64位十进制数值的精度执行DECIMAL操作,
  •  Mootools 1.2手风琴(Accordion)教程原文地址:30 Days of Mootools 1.2 Tutoria
  • 前段时间我通过观察韩国网站和其他作品发现了普遍存在黄金分割这样一个规律,不过只跟色相有关,明度、纯度还没做研究,今天看到论坛一篇“网页配色之
手机版 网络编程 asp之家 www.aspxhome.com