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

 时间:2026-02-12 05:21:18

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

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

  • 剑灵气功之路3该怎么做
  • 路障图片设计
  • 怎么吃热浆豆腐
  • 效果最好的感冒药是什么?
  • 成功必备的六大态度
  • 热门搜索
    重庆周边旅游景点 品途旅游网 西双版纳的旅游景点 爱琴海旅游 徐州旅游网 海南三亚旅游景点 中俄边境旅游 长春大学旅游学院吧 去泰国旅游需要什么手续 旅游团查询