数据结构 二叉树的非递归遍历
来源:互联网 发布:mac os 分辨率设置 编辑:程序博客网 时间:2024/04/30 16:53
#include <stdio.h>#include <stdlib.h>#define STACT_INIT_SIZE 100#define STACTINCREMENT 10#define OK 1#define ERROR 0#define OVERFLOW -2typedef char TElemType;typedef struct BiNode{TElemType data;struct BiNode *lchild,*rchild;}BiNode, *BiTree;typedef BiTree SElemType;typedef struct {SElemType *base;SElemType *top;int stacksize;}SqStack;int InitStack(SqStack &S){S.base = (SElemType *)malloc(STACT_INIT_SIZE * sizeof(SElemType));if (!S.base){exit(OVERFLOW);}S.top = S.base ;S.stacksize = STACT_INIT_SIZE;return OK;}int Push(SqStack &S, SElemType e){if (S.top - S.base >= S.stacksize){S.base = (SElemType*)realloc(S.base , (S.stacksize + STACTINCREMENT) * sizeof(SElemType));if (!S.base){exit(OVERFLOW);}S.top = S.base + S.stacksize ;S.stacksize += STACTINCREMENT;}*S.top++ = e;return OK;}int Pop(SqStack &S, SElemType &e){if (S.base == S.top){return ERROR;}e = *--S.top;return OK;}int GetTop(SqStack S,SElemType &e){if (S.base == S.top){return ERROR;}e = *(S.top-1);return OK;}int StackEmpty(SqStack S){if (S.top == S.base ){return 1;}return 0;}void Create_BiTree(BiTree &T){TElemType ch;scanf("%c",&ch);if (ch == '#'){T = NULL;}else{T = (BiTree)malloc(sizeof(BiNode));if (!T){exit(OVERFLOW);}T->data = ch;Create_BiTree(T->lchild);Create_BiTree(T->rchild);}}void PreOrderTraverse1(BiTree T){//先序遍历的递归调用1SqStack S;BiTree p = T;InitStack(S);Push(S,p);while (!StackEmpty(S)){while (GetTop(S,p) && p){printf("%c",p->data);Push(S,p->lchild);}Pop(S,p);if (!StackEmpty(S)){Pop(S,p);Push(S,p->rchild);}}}void PreOrderTraverse2(BiTree T){//先序遍历的递归调用2SqStack S;BiTree p = T;InitStack(S);while (p || !StackEmpty(S)){if (p){printf("%c",p->data);Push(S,p);p = p->lchild;}else{Pop(S,p);p = p->rchild;}}}void InOrderTraverse1(BiTree T){//中序遍历的非递归调用1SqStack S;BiTree p = T;InitStack(S);Push(S,p);while (!StackEmpty(S)){while (GetTop(S,p) && p){Push(S,p->lchild);}Pop(S,p);if (!StackEmpty(S)){Pop(S,p);printf("%c",p->data);Push(S,p->rchild);}}}void InOrderTraverse2(BiTree T){//中序遍历的非递归调用2SqStack S;BiTree p = T;InitStack(S);while (p || !StackEmpty(S)){if (p){Push(S,p);p = p->lchild;}else{Pop(S,p);printf("%c",p->data);p = p->rchild;}}}void PostOrderTraverse1(BiTree T){BiTree p,p1;SqStack S;p = T;p1 = NULL;InitStack(S);while (p || !StackEmpty(S)){if (p){Push(S,p);//visit,先序p = p->lchild;}else{GetTop(S,p);//visit,中序if (p->rchild == p1){//右子树为空,或者为上一次弹出的子树,则弹出根节点Pop(S,p1);p = NULL;//visit,后序printf("%c",p1->data);}else{p = p->rchild;p1 = NULL;}}}}int main(){BiTree T;Create_BiTree(T);PreOrderTraverse1(T);printf("\n");PreOrderTraverse2(T);printf("\n");InOrderTraverse1(T);printf("\n");InOrderTraverse2(T);printf("\n");PostOrderTraverse1(T);printf("\n");return 0;}
0 0
- 数据结构 二叉树的非递归遍历
- 数据结构:二叉树的非递归遍历
- 二叉树的非递归遍历-数据结构
- [数据结构] 二叉树的递归与非递归遍历
- 【数据结构】二叉树的遍历(递归与非递归)
- 【数据结构与算法】二叉树的遍历(递归遍历、非递归遍历、层序遍历)
- 【数据结构】 二叉树 非递归遍历
- 数据结构-非递归遍历二叉树
- 数据结构--二叉树遍历非递归实现
- 【数据结构】非递归遍历二叉树
- 数据结构-非递归遍历二叉树
- 数据结构----二叉树遍历的非递归算法实现
- 数据结构之二叉树的非递归遍历
- 数据结构之二叉树的非递归遍历
- 【数据结构】二叉树的定义,递归遍历,非递归遍历,层次遍历,深度等
- 数据结构与算法学习记录--二叉树的创建,递归遍历,非递归遍历的实现
- 二叉树的递归,非递归遍历
- 二叉树的递归+非递归遍历
- 猴子吃桃程序怎么做
- android开发之数据库存取图片
- 漫谈C语言及如何学习C语言
- ofbiz-kendoui-grid
- Android开发笔记---Manifest的android:windowSoftInputMode属性说明
- 数据结构 二叉树的非递归遍历
- 错误 是否保存对以下各项的更改 devenv.sin
- 字符串哈希算法
- 程序员必知(四):找次品
- 汇编程序的多模块化
- 合泰 HT66F30 定时器初始化
- inux 学习书目推荐
- 数据结构 二叉树的线索存储
- 面积