二叉树 -php实现先序、中序、后序遍历二叉树
- <?php
- 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 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->left!=null){
- array_push($stack,$center_node->left);
- }
- if($center_node->right!=null){
- array_push($stack,$center_node->right);
- }
- }
- while(!empty($outstack)){
- $center_node=array_pop($outstack);
- 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;
- preorder($a);//A B D C E F
- echo '<hr/>';
- inorder($a);//D B A E C F
- echo '<hr/>';
- tailorder($a);//D B E F C A
二叉树 -php实现先序、中序、后序遍历二叉树相关推荐
- Python__数据结构与算法——树、二叉树(实现先、中、后序遍历)
目录 一.树 二.二叉树 树和前面所讲的表.堆栈和队列等这些线性数据结构不同,树不是线性的.在处理较多数据时,使用线性结构较慢,而使用树结构则可以提高处理速度.不过,相对于线性的表.堆栈和队列等线性数 ...
- 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...
已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...
- 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)
7-10 先序序列创建二叉树,输出先序序列.中序序列.后序序列并输出叶子结点数 (10 分) 对于给定的二叉树,输出其先序序列.中序序列.后序序列并输出叶子结点数. 输入格式: 二叉树的先序遍历序列. ...
- java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...
224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...
- 二叉树的构造(前序+中序)---(后序 + 中序)
二叉树的构造(前序+中序)-(后序 + 中序) 思路:要对前序+中序(后序+中序)的构建树的动态过程要了解,思路比较简单,在了解了这个过程之后,理解下面代码就容易了. 过程 参考图: 前序 + 中序: ...
- 先序序列和中序序列构造二叉树,中序序列和后序序列构造二叉树
1:首先读者要了解二叉树BinaryTree基本概念,其次区分左子树与左孩子节点,右子树与右孩子节点.(在数据结构中 一个节点可以成为一棵树,对于没有孩子节点的节点称为为叶子节点). 2:在 ...
- 二叉树的前、中、后序遍历
所谓二叉树遍历是按某种特定规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次.访问结点所做的操作依赖于具体的应用问题. 遍历是二叉树上最重要的运算之一,也是二叉树进行其它运算的基础. 二 ...
- 非递归先、中、后序遍历二叉树(C语言)
文章目录 前言 一.二叉树非递归遍历算法 1.先序遍历 2.中序遍历 3.后序遍历 二.完整程序 三.运行结果实例 前言 本程序采用C语言编写,栈和二叉树的基本操作函数基于严蔚敏老师的<数据结构 ...
- 二叉树前、中、后线索化及对应前、中、后序线索化遍历
二叉树前中后线索化及对应前中后序线索化遍历(图解) 二叉树线索化都是套路,会一种另外两种只是稍微修改一下代码 值得一提的是后序线索化输出,逆序思维将后序线索化看成前序,采用"前序线索化输出& ...
- 二叉树遍历方法——前、中、后序遍历(图解)
目录 一.前序遍历 (1)递归版本 (2)非递归版本 二.中序遍历 (1)递归版本 (2)非递归版本 三.后序遍历 (1)递归版本 (2)非递归版本 四.总结 五.测试程序 六.程序输出 二叉树的遍历 ...
最新文章
- HTML5网页上播放mp4失败的原因
- 深入理解计算机系统学后感,深入理解计算机系统(读书笔记)
- MySQL性能基准测试对比:MySQL 5.7与MySQL 8.0
- vi is failed with error E382: Cannot write, 'buftype' option is set in Linux
- spring 异常捕获异常_跟踪异常–第5部分–使用Spring进行计划
- 算法基础——列表查找
- c语言divide error,Python numpy.corrcoef()RuntimeWarning:在true_divide中遇到无效值c / = stddev [:,None]...
- 拓端tecdat|Python基于粒子群优化的投资组合优化研究
- 【动手学深度学习】代码(持续更新)
- win10设置打开闪退怎么办 电脑windows10设置打开闪退解决方法
- 【高数复盘】1.1映射与函数思维导图
- java循环26个字母_java基础 26个英文字母循环输出 13个字母空一行
- 联想小新air13pro重装系统_联想小新Air13Pro笔记本U盘重装win10系统教程
- 女人不适合做产品经理?
- SNS背后的科学(1)从六度分隔到无尺度网络
- vue中watch的详解
- iOS——directory not found for option 链接错误
- Java程序员必看经典书籍,助你早日打通任督二脉,Java菜鸟教程视频
- kafka+flume 实时数据处理
- tvOS游戏开发系列(SpriteKit)之准备工作(一)