二叉树三种遍历非递归算法
c实现
#define maxsize 100
typedef struct {
Bitree Elem[maxsize];
int top;
} SqStack;
void PreOrderUnrec(Bitree t) {
SqStack s;
StackInit(s);
p=t;
while (p!=null || !StackEmpty(s)) {
while (p!=null) { //遍历左子树
visite(p->data);
push(s,p);
p=p->lchild;
}//endwhile
if (!StackEmpty(s)) { //通过下一次循环中的内嵌while实现右子树遍历
p=pop(s);
p=p->rchild;
}//endif
}//endwhile
}//PreOrderUnrec
2.中序遍历非递归算法
#define maxsize 100
typedef struct {
Bitree Elem[maxsize];
int top;
} SqStack;
void InOrderUnrec(Bitree t) {
SqStack s;
StackInit(s);
p=t;
while (p!=null || !StackEmpty(s)) {
while (p!=null) { //遍历左子树
push(s,p);
p=p->lchild;
}//endwhile
if (!StackEmpty(s)) {
p=pop(s);
visite(p->data); //访问根结点
p=p->rchild; //通过下一次循环实现右子树遍历
}//endif
}//endwhile
}//InOrderUnrec
3.后序遍历非递归算法
#define maxsize 100
typedef enum {L,R} tagtype;
typedef struct {
Bitree ptr;
tagtype tag;
} stacknode;
typedef struct {
stacknode Elem[maxsize];
int top;
} SqStack;
void PostOrderUnrec(Bitree t) {
SqStack s;
stacknode x;
StackInit(s);
p=t;
do {
while (p!=null) { //遍历左子树
x.ptr = p;
x.tag = L; //标记为左子树
push(s,x);
p=p->lchild;
}
while (!StackEmpty(s) && s.Elem[s.top].tag==R) {
x = pop(s);
p = x.ptr;
visite(p->data); //tag为R,表示右子树访问完毕,故访问根结点
}
if (!StackEmpty(s)) {
s.Elem[s.top].tag =R; //遍历右子树
p=s.Elem[s.top].ptr->rchild;
}
} while (!StackEmpty(s));
}//PostOrderUnrec
二叉树三种遍历非递归算法相关推荐
- 剑指offer——复习1:二叉树三种遍历方式的迭代与递归实现
剑指offer--复习1:二叉树三种遍历方式的迭代与递归实现 20180905更新:这个博客中的解法不是很好,看相应的LeetCode题目笔记~~~ 我感觉此博客中的说法更容易让人理解:https:/ ...
- 二叉树三种遍历方式的非递归实现
树的递归实现方式很简单,下面介绍三种遍历的非递归实现. 树的遍历有个特点,那就是在处理具体问题时,绝大多数情况下是在当前循环.或函数(或是子树)的根节点来处理的,能够注意到当前根节点是如何从上个根节点 ...
- 二叉树中序遍历非递归算法实现详解
二叉树是数据结构中的经典结构,也是应用很广泛的结构之一.二叉树具有一些特定的性质,如 n0 = n2+1,在一些应用中,常常要求在树中查找具有某些特征的节点,或者对树中节点进行处理,即遍历二叉树的问题 ...
- 一文弄懂二叉树三种遍历
作者 | 菠了个菜 责编 | 屠敏 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次. 在二叉树的遍历中存在三种较为常用的遍历方式:前序遍历.中 ...
- C++实现二叉树中序遍历非递归算法
/*二叉树的中序遍历非递归算法目标遍历的二叉树:1/ \2 4/ \3 5 待输出结果为3,2,5,1,41.首先得用上面定义的结构体把这颗树表示出来2.表示出这颗树后在调用二叉树的中序遍历非递归算法 ...
- 二叉树三种遍历方式,先序、中序、后序
二叉树遍历方式分为三种:先序,中序和后序. 可以以根节点的位置为参考来记遍历方式,在第一个为先序,中间为中序,最后为后序: 即:先序: 根左右:中序:左根右:后序:左右根. 借个图: 之前看过一个视频 ...
- 二叉树三种遍历(递归以及非递归实现)
package com.shiyeqiang.tree;import java.util.Stack;public class BiTree {public static void main(Stri ...
- 数据结构二叉树后序遍历非递归算法
后序遍历的非递归代码 void PostOrder(BiTree T) { // Add your code hereif(T==NULL) return; //如果为空,则退出Stack s;Ini ...
- 二叉树后序遍历非递归算法(详解)
前序和中序都比较简单 后序我按自己的理解好好说一下吧,基本思路是利用堆栈将递归转化为循环 首先定义节点结构 struct BTNode {int val;bool visR;bool visL;BTN ...
- 二叉树的前序中序后序三种遍历方式及递归算法介绍
二叉树三种遍历方式 二叉树的遍历是整个二叉树的核心,二叉树的几本操作都要依赖于遍历,对于二叉树的遍历,递归是最简单也最容易理解的,本文详细介绍了二叉树的三种遍历方法,并用递归来实现: 完整的可调试代码 ...
最新文章
- IT团队之非正式沟通
- ubuntu cmake交叉编译时报错:没有那个文件或目录
- oracle 峰度 函数,Oracle Database 21c 十大新特性一览
- 阿里云服务器 window server tomcat启动 并且关闭window防火墙 配置8080端口开放还是没用
- libcurl上传文件
- 前端学习(1855)vue之电商管理系统电商系统之安装mysql出现VCRUNTIME140_1.dll
- Linux下第一次使用MySQL数据库,设置密码
- Excel Rendering Limitations
- 基于ArcGIS软件的打开教程
- 智能人物画像综合分析系统——Day1
- python根据手表货号从腕表之家网站爬取相应信息
- 1.6 建立Servers服务(2020-12-6)
- IOS图像2之jpg、png图片保存、互转、设置有损压缩因子
- wlh机器人_恐怖谷理论:人类对仿真机器人的天生恐惧
- ios animation 动画效果实现
- MC34063升压电路中常见的几种问题
- 【SMS】SMS协议介绍之SGSN
- 数控铣削图案及编程_数控铣床编程30例带图 急!!数控编程实例 带图案的
- 人工智能写作产品解决的痛点
- Redhat防火墙端口设置
热门文章
- poj1836——dp,最长上升子序列(lis)
- 实例开发:ASP.NET创建网络相册
- BZOJ 1030 [JSOI2007]文本生成器(ac自动机+dp)
- Vert.x 异步访问数据库 MySQL
- D3之svg transform 与 css3 transform 区别与联系
- 基于阿里云的MQTT远程控制
- 20169217 《Linux内核原理与分析》 第十一周作业
- [[UIScreen mainScreen] bounds] 返回的屏幕尺寸不对
- 老板凭啥提拔你:如何得到老板赏识
- mysql到es的交叉验证