手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

中序遍历的非递归算法实例

时间:2024-11-04 22:51:26

1、#include<iostream>using namespace std;typedef struct BiTnode//二叉树的二叉链表储存表示{ char data; struct BiTnode *lchild,*rchild;}BiTnode,*BiTree;

2、typedef struct //顺序栈的储存结构{ BiTnode *base; BiTnode *top; int stacksize;}SqStack;

3、int InitStack(SqStack &S)//初始化顺序栈{ S.base=new BiTnode[1000]; if(!S.base)exit(0); S.top=S.base; S.stacksize=1000; return 1;}

4、int StackEmpty(SqStack &S)//判断栈是否为空{ if(S.base==S.top) return 1; else return 0;}

5、int Push(SqStack &S,BiTnode *p)//入栈{ if(S.top-S.base==S.stacksize)return 0; *S.top++=*p; return 1;}

6、int Pop(SqStack &S,BiTnode *q)//出栈{ if(S.top==S.base)return 1; *q=*--S.top; return 0;}

7、void InorderTraver(BiTree T)//中序遍历{ SqStack S; InitStack(S);//初始化一个空栈S BiTnode *p,*q; p=T; q=new BiTnode;//申请一个节点空间,用来存放栈顶弹出的元素 while(p||!StackEmpty(S))//当p非空或者栈S非空时,执行以下操作 { if(p) //如果p非空,则将p进栈,p指向该结点的左孩子 { Push(S,p); p=p->lchild; } else //如果p为空,则弹出栈顶元素并访问,将p指向该结点的右孩子 { Pop(S,q); cout<<q->data; p=q->rchild; } }}

8、void CreateBiTree(BiTree &T)//先序创建二叉树{ char ch; cin>>ch; if(ch=='#')T=NULL; else { T=new BiTnode; T->data=ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); }}

9、int main(){ BiTnode *T; CreateBiTree(T); InorderTraver(T); return 0;}

10、以“a*b-c”为实例中序遍历输出

中序遍历的非递归算法实例
© 手抄报圈