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

2025-12-03 01:28:59

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”为实例中序遍历输出

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
相关推荐
  • 阅读量:37
  • 阅读量:102
  • 阅读量:117
  • 阅读量:62
  • 阅读量:141
  • 猜你喜欢