#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 实现非递归树_二叉树的非递归前序,中序,后序遍历算法相关推荐

  1. Python__数据结构与算法——树、二叉树(实现先、中、后序遍历)

    目录 一.树 二.二叉树 树和前面所讲的表.堆栈和队列等这些线性数据结构不同,树不是线性的.在处理较多数据时,使用线性结构较慢,而使用树结构则可以提高处理速度.不过,相对于线性的表.堆栈和队列等线性数 ...

  2. 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++

    a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...

  3. 二叉树的遍历:先序 中序 后序遍历的递归与非递归实现及层序遍历

    二叉树的定义:一种基本的数据结构,是一种每个节点的儿子数目都不多于2的树 树节点的定义如下: // 树(节点)定义 struct TreeNode {int data; // 值TreeNode* l ...

  4. 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法

    本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...

  5. 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...

    二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...

  6. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...

    224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...

  7. C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本

    本文并非我所写,是复制的该链接中的内容: 最近学习二叉树,想编程实现递归和非递归的实现方式: 递归的方式就不说了,因为大家的递归程序都一样:但是对于非递归的实现方式, 根据这几天的查阅资料已看到差不多 ...

  8. 二叉树遍历(递归实现前序/中序/后序遍历)

    1. 准备工作 我们先定义一棵普通的二叉树,如下图 2. 前序遍历 通过递归进行遍历: 如果二叉树为空,则操作返回: 如果非空,否则从根结点开始,然后遍历左子树,再遍历右子树. 前序遍历的结果是:AB ...

  9. 序列化和反序列化二叉树 -----前序,中序,后序,层序

    目录 一.序列化和反序列化 1.什么是序列化和反序列化 二.前序遍历 1.序列化 1.问题分析 2.代码实现 2.反序列化 1.问题分析 2.代码实现 三.后序遍历 1.序列化 1.思路分析 2.代码 ...

最新文章

  1. Codeforces数学1600----day1[同余定理,树状数组+两次二分,,组合计数]
  2. 贵阳市全国首部大数据立法《条例》5月起正式实施
  3. easyui框架前后端交互_easyui前后端分离
  4. UGUI_UGUI组件属性
  5. 上海理工大学第二届“联想杯”全国程序设计邀请赛 - Dahno Dahno(SW)
  6. iphone新旧手机数据传输已取消_如何取消iPhone手机App自动扣费?三种方法让你不再被“偷”...
  7. Qt下OpenCv中cvGetWindowHandle的使用
  8. react脚手架_react脚手架create-react-app安装与使用
  9. svpwm矢量控制电机相电压波形_SVPWM调制中的6个非零基础电压矢量的幅值到底是Udc还是2/3Udc ? 电压利用率为什么是1?...
  10. 教你如何修改运行中的docker容器的端口映射
  11. 分布式存储 HDFS原理
  12. 用Anaconda下载tensorflow(windows)小白教程
  13. beetl html模板,Beetl模板引擎之自定义html标签
  14. 学生专用计算机负n次方问的按,学生专用计算器怎么开N次方
  15. 关于应用界面引导性的设计模式
  16. 如何缩短测试开发周期和开发成本?
  17. “我的恩典是够你用的”(哥林多后书十二章9节)
  18. MCV模型流程图整理
  19. 淘宝铸造亿级流量的首页?十年一剑
  20. Python 类的定制

热门文章

  1. 概率论和数理统计 - 02 - 随机变量及其分布
  2. DFB [03] 移植遇到的实际问题 基于某著名平台
  3. php rijndael,将PHP Rijndael算法重写为Java(Android)
  4. mysql drop 权限_MySQL procedure drop权限问题
  5. python显示等待和隐式等待_荐selenium内的隐式等待和显示等待的区别
  6. nginx 强制跳转https_Nginx服务器环境手动安装Discuz! Q非详细教程
  7. python如何给一组数据打标签_给数据集打标签python代码实现(1)
  8. android 运动目标检测_MindSpore应用案例:AI对篮球运动员目标的检测
  9. centos下python编程工具_CentOS下python的下载及安装
  10. html中如何使用渐变颜色代码,html – 如何在CSS中使用渐变作为字体颜色?