mysql 实现非递归树_二叉树的非递归前序,中序,后序遍历算法
#include #include struct tree
{
char data;
struct tree *lchild;
struct tree *rchild;
};
typedef struct tree * treptr;
treptr build(treptr t)//先序建树
{
char c;
c=getchar();
if(c=='#')
{
t=NULL;
}
else
{
t=(treptr)malloc(sizeof(struct tree));
t->data=c;
t->lchild=build(t->lchild);
t->rchild=build(t->rchild);
}
return t;
}
#if 0
void postdorder_b(treptr root)//这是前序遍历递归实现
{
if (root!=NULL)
{
printf("%c",root->data);
postdorder(root->lchild);
postdorder(root->rchild);
}
}
void postdorder_m(treptr root)//这是中序遍历递归实现
{
if (root!=NULL)
{
postdorder(root->lchild);
printf("%c",root->data);
postdorder(root->rchild);
}
}
void postdorder_l(treptr root)//这是后序遍历递归实现
{
if (root!=NULL)
{
postdorder(root->lchild);
postdorder(root->rchild);
printf("%c",root->data);
}
}
#endif
struct stack
{
treptr *top,*base;
};
typedef struct stack *stackptr;
void init (stackptr s)//初始化栈
{
s->base=(treptr*)malloc(sizeof(treptr)*100);
s->top=s->base;
}
void push(stackptr s,treptr t)//入栈
{
*(s->top++)=t;
}
treptr pop(stackptr s)//弹出栈顶元素
{
treptr t;
t=*(--(s->top));
return t;
}
treptr gettop(stackptr s)//取栈顶元素
{
treptr *l=s->top-1;
return *(l);
}
void postorder_l(treptr t)//这是非递归后序实现
{
stackptr s=(stackptr)malloc(sizeof(struct stack));
treptr temp=t;
treptr p;
treptr lastvist=NULL;
init(s);
p=t;
while(p||s->top!=s->base)
{
while(p)
{
push(s,p);
p=p->lchild;
}
temp=gettop(s);
if(temp->rchild==NULL||temp->rchild==lastvist)
{
putchar(temp->data);
lastvist=pop(s);
}
else
p=temp->rchild;
}
}
void postorder_m(treptr t)//这是非递归中序实现
{
stackptr s=(stackptr)malloc(sizeof(struct stack));
treptr temp=t;
treptr p;
treptr lastvist=NULL;
init(s);
p=t;
while(p||s->top!=s->base)
{
while(p)
{
push(s,p);
p=p->lchild;
}
temp=pop(s);
putchar(temp->data);
p=temp->rchild;
}
}
void postorder_b(treptr t)//这是非递归前序实现
{
stackptr s=(stackptr)malloc(sizeof(struct stack));
treptr temp=t;
treptr p;
treptr lastvist=NULL;
init(s);
p=t;
while(p||s->top!=s->base)
{
while(p)
{
putchar(p->data);
push(s,p);
p=p->lchild;
}
temp=pop(s);
p=temp->rchild;
}
}
int main()
{
treptr t=NULL;
t=build(t);
//postdorder(t);
printf("\n非递归前序遍历\n");
postorder_b(t);
printf("\n非递归中序遍历\n");
postorder_m(t);
printf("\n非递归后序遍历\n");
postorder_l(t);
printf("\n");
return 0;
}
mysql 实现非递归树_二叉树的非递归前序,中序,后序遍历算法相关推荐
- Python__数据结构与算法——树、二叉树(实现先、中、后序遍历)
目录 一.树 二.二叉树 树和前面所讲的表.堆栈和队列等这些线性数据结构不同,树不是线性的.在处理较多数据时,使用线性结构较慢,而使用树结构则可以提高处理速度.不过,相对于线性的表.堆栈和队列等线性数 ...
- 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++
a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...
- 二叉树的遍历:先序 中序 后序遍历的递归与非递归实现及层序遍历
二叉树的定义:一种基本的数据结构,是一种每个节点的儿子数目都不多于2的树 树节点的定义如下: // 树(节点)定义 struct TreeNode {int data; // 值TreeNode* l ...
- 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法
本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...
- 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...
二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...
- java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...
224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...
- C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本
本文并非我所写,是复制的该链接中的内容: 最近学习二叉树,想编程实现递归和非递归的实现方式: 递归的方式就不说了,因为大家的递归程序都一样:但是对于非递归的实现方式, 根据这几天的查阅资料已看到差不多 ...
- 二叉树遍历(递归实现前序/中序/后序遍历)
1. 准备工作 我们先定义一棵普通的二叉树,如下图 2. 前序遍历 通过递归进行遍历: 如果二叉树为空,则操作返回: 如果非空,否则从根结点开始,然后遍历左子树,再遍历右子树. 前序遍历的结果是:AB ...
- 序列化和反序列化二叉树 -----前序,中序,后序,层序
目录 一.序列化和反序列化 1.什么是序列化和反序列化 二.前序遍历 1.序列化 1.问题分析 2.代码实现 2.反序列化 1.问题分析 2.代码实现 三.后序遍历 1.序列化 1.思路分析 2.代码 ...
最新文章
- Codeforces数学1600----day1[同余定理,树状数组+两次二分,,组合计数]
- 贵阳市全国首部大数据立法《条例》5月起正式实施
- easyui框架前后端交互_easyui前后端分离
- UGUI_UGUI组件属性
- 上海理工大学第二届“联想杯”全国程序设计邀请赛 - Dahno Dahno(SW)
- iphone新旧手机数据传输已取消_如何取消iPhone手机App自动扣费?三种方法让你不再被“偷”...
- Qt下OpenCv中cvGetWindowHandle的使用
- react脚手架_react脚手架create-react-app安装与使用
- svpwm矢量控制电机相电压波形_SVPWM调制中的6个非零基础电压矢量的幅值到底是Udc还是2/3Udc ? 电压利用率为什么是1?...
- 教你如何修改运行中的docker容器的端口映射
- 分布式存储 HDFS原理
- 用Anaconda下载tensorflow(windows)小白教程
- beetl html模板,Beetl模板引擎之自定义html标签
- 学生专用计算机负n次方问的按,学生专用计算器怎么开N次方
- 关于应用界面引导性的设计模式
- 如何缩短测试开发周期和开发成本?
- “我的恩典是够你用的”(哥林多后书十二章9节)
- MCV模型流程图整理
- 淘宝铸造亿级流量的首页?十年一剑
- Python 类的定制
热门文章
- 概率论和数理统计 - 02 - 随机变量及其分布
- DFB [03] 移植遇到的实际问题 基于某著名平台
- php rijndael,将PHP Rijndael算法重写为Java(Android)
- mysql drop 权限_MySQL procedure drop权限问题
- python显示等待和隐式等待_荐selenium内的隐式等待和显示等待的区别
- nginx 强制跳转https_Nginx服务器环境手动安装Discuz! Q非详细教程
- python如何给一组数据打标签_给数据集打标签python代码实现(1)
- android 运动目标检测_MindSpore应用案例:AI对篮球运动员目标的检测
- centos下python编程工具_CentOS下python的下载及安装
- html中如何使用渐变颜色代码,html – 如何在CSS中使用渐变作为字体颜色?