#include <stdio.h>
#include <stdlib.h>
#include "bitree.h"
#include "sqstack.h"
void InOrderTraverse2(BiTree T,void(*Visit)(TElemType));// 中序非递归遍历二叉树
int main()
{
BiTree T;
CreateBiTree(T);
printf("中序遍历:");
InOrderTraverse2(T,visit);
printf("\n");
DestoryBiTree(T);
return 0;
}
void InOrderTraverse2(BiTree T,void(*Visit)(TElemType))
{ // 采用二叉链表存储结构,Visit是对数据元素操作的应用函数。
// 中序遍历二叉树T的非递归算法,对每个数据元素调用函数Visit
/********** Begin *********/
SqStack S;//定义并初始化栈
InitStack(S);
if(T==NULL)
return;
while(T||!StackEmpty(S)){
if(T){
Push(S,T);
T=T->lchild;
}
else{
Pop(S,T);
Visit(T->data);
T=T->rchild;
}
}
DestroyStack(S);
/********** End **********/
}