php 实现(非递归,栈模拟)二叉树的先序、中序、后序
来源:互联网 发布:ubuntu设置ip自动获取 编辑:程序博客网 时间:2024/06/06 12:46
二叉树定义是这样的:一棵非空的二叉树由根结点及左、右子树这三个基本部分组成,根据节点的访问位置不同有三种遍历方式:
① NLR:前序遍历(PreorderTraversal亦称(先序遍历))
——访问结点的操作发生在遍历其左右子树之前。
② LNR:中序遍历(InorderTraversal)
——访问结点的操作发生在遍历其左右子树之中(间)。
③ LRN:后序遍历(PostorderTraversal)
——访问结点的操作发生在遍历其左右子树之后。
如下图:
代码如下:
<?php/** * 二叉树遍历 * @blog<http://www.phpddt.com> */class Node { public $value; public $left; public $right;}//前序遍历,访问根节点->遍历子左树->遍历右左树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 postorder($root){ $pushstack = array(); $visitstack = array(); array_push($pushstack, $root); while (!empty($pushstack)) { $center_node = array_pop($pushstack); array_push($visitstack, $center_node); if ($center_node->left != null) array_push($pushstack, $center_node->left); if ($center_node->right != null) array_push($pushstack, $center_node->right); } while (!empty($visitstack)) { $center_node = array_pop($visitstack); echo $center_node->value." "; }}//创建如上图所示的二叉树$a = new Node();$b = new Node();$c = new Node();$d = new Node();$e = new Node();$f = new Node();$a->value = 'A';$b->value = 'B';$c->value = 'C';$d->value = 'D';$e->value = 'E';$f->value = 'F';$a->left = $b;$a->right = $c;$b->left = $d;$c->left = $e;$c->right = $f;//前序遍历echo '前序遍历:';preorder($a); //结果是:A B D C E Fecho '<br>';echo '中序遍历:';inorder($a); //结果是: D B A E C Fecho '<br>';echo '后序遍历:';postorder($a); //结果是: D B E F C Aecho '<br>';?>
0 0
- php 实现(非递归,栈模拟)二叉树的先序、中序、后序
- 二叉树遍历的非递归算法(先序、中序、后序)代码实现
- PHP实现非递归先序、中序、后序遍历二叉树
- C++ 二叉树的构建,先序/中序/后序的递归/非递归实现
- 二叉树的先序、中序、后序遍历的递归和非递归实现
- 二叉树的先序、中序、后序的递归与非递归实现
- 二叉树的先序,中序,后序递归和非递归实现
- PHP 实现(递归)二叉树的先序、中序、后序
- 二叉树的建树、遍历(先序、中序、后序、层次)(递归和非递归)--Java实现
- 二叉树的先序、中序、后序遍历的非递归实现
- 二叉树的先序/中序/后序(递归、非递归)+层序遍历
- 二叉树的先序、中序、后序遍历(递归 and 非递归)
- c语言原生实现二叉树的 非递归 中序 先序 后序 遍历
- 二叉树的先序、中序、后序的递归及非递归实现,以及层次遍历的实现:
- 利用栈实现二叉树的先序,中序,后序遍历的非递归操作
- 利用栈实现二叉树的先序,中序,后序遍历的非递归操作
- 二叉树的先序、中序和后序的非递归遍历(C语言实现)
- 二叉树的中序、先序、后序遍历非递归遍历算法(使用堆栈,用循环实现)
- 字符串截取
- Could not autowire field: private com.dounion.ygyc.biz.business.BizArchivesBusiness com.dounion.ygyc
- ActiveMQ消息传送机制以及ACK机制详解
- lightoj 1282 Leading and Trailing
- GNU GCC是干什么的,是不是开发环境,还是一种术语
- php 实现(非递归,栈模拟)二叉树的先序、中序、后序
- 遇到的问题----java--myeclipse部署时An internal error occurred NullPointException错误
- NYOJ 91 阶乘之和 贪心算法
- boost::asio::ip::tcp实现网络通信的小例子
- linux下的文件系统选型
- Android开发之将Edittext输入弹出的软键盘设置搜索确定键。详细代码,已验证可用。
- red5源码分析---5
- ./configure,make,make install的作用
- Android Adobe工具类