以后程序写完保存在这里。
根据严尉敏的<数据结构>第6章的算法而来,非递归二叉树只有中序,根据第130页算法 。
#include <stdio.h>
#include <process.h>
#include <stdarg.h>
#include <stdlib.h>
#include <malloc.h>

#define NULL 0
#define MAXNODE 100
#define OVERFLOW -2
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR -1
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

typedef char TElemType;
typedef int Status;

typedef struct BiTNode

...{
TElemType data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;

typedef struct

...{
BiTree base;
BiTree top;
int stacksize;
} SqStack;

Status PrintElement(TElemType e)

...{
printf("_%c_",e);
return OK;
}

Status NewTree(BiTree &T)

...{
T=(BiTree)malloc(sizeof(BiTNode));T->data='#';
T->lchild=NULL;
T->rchild=NULL;
return OK;
}

Status CreateBiTree(BiTree &T)

...{
TElemType ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else

...{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
return(OVERFLOW);
T->data=ch;
printf("CreateBiTree succeed at %c ",ch);
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}//CreateBiTree

Status PreOrderTraverse(BiTree T,Status(* Visit)(TElemType e))

...{
if(T)

...{
if(Visit(T->data))
if(PreOrderTraverse(T->lchild,Visit))
if(PreOrderTraverse(T->rchild,Visit))
return OK;
return ERROR;
}
return OK;
}

Status InOrderTraverse(BiTree T,Status(* Visit)(TElemType e))

...{
if(T)

...{
if(InOrderTraverse(T->lchild,Visit))
if(Visit(T->data))
if(InOrderTraverse(T->rchild,Visit))
return(OK);
return(ERROR);
}
return OK;
}

Status PostOrderTraverse(BiTree T,Status(* Visit)(TElemType e))

...{
if(T)

...{
if(PostOrderTraverse(T->lchild,Visit))
if(PostOrderTraverse(T->rchild,Visit))
if(Visit(T->data))
return OK;
return ERROR;
}
return OK;
}

Status InitStack(SqStack &T)

...{
T.base=(BiTNode *)malloc(STACK_INIT_SIZE*sizeof(BiTNode));
if(!T.base)
return(OVERFLOW);
T.top=T.base;
T.stacksize=STACK_INIT_SIZE;
return OK;
}//InitStack

Status StackEmpty(SqStack S)

...{
if(S.base==S.top)
return TRUE;
else
return FALSE;
}//StackEmpty

Status GetTop(SqStack S,BiTree &e)

...{
if(S.top==S.base)
return ERROR;
S.top=S.top-1;
e=S.top;
S.top++;
return OK;
}//GetTop

Status Push(SqStack &S,BiTNode e)

...{
if(S.top-S.base>=S.stacksize)

...{
S.base=(BiTNode *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(BiTNode));
if(!S.base) return(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize=S.stacksize+STACKINCREMENT;
}
*(S.top)=e;
S.top++;
return OK;
}//Push

Status Pop(SqStack &S,BiTree &e)

...{
if(S.top==S.base) return(ERROR);
S.top--;
e=S.top;
return(OK);
}//Pop

Status InOrderTraverseStack(BiTree T,Status(* Visit)(TElemType e))

...{
SqStack S;
InitStack(S);BiTree p;
p=T;
while(p||!StackEmpty(S))

...{
if(p)

...{
Push(S,*p);
p=p->lchild;
}
else

...{
Pop(S,p);//p=S.top;
if(!Visit(p->data)) return ERROR;
p=p->rchild;
}
}
return(OK);
}

Status InOrderTraverse_621(BiTree T,Status(* Visit)(TElemType e))

...{
SqStack S;
InitStack(S);BiTree p;Push(S,*T);p=T;
while(!StackEmpty(S))

...{
while(p->lchild)

...{
Push(S,*(p->lchild));
GetTop(S,p);
}
if(!StackEmpty(S))

...{
Pop(S,p);
if(!Visit(p->data))
return ERROR;
if(p->rchild)
Push(S,*(p->rchild));
}
}
return OK;
}

int main()

...{
BiTree T,S;
NewTree(T);
CreateBiTree(T);
printf("CreateBiTree Succeed! ");
PreOrderTraverse(T,PrintElement);printf("___PreOrderTraverse Complete. ");
InOrderTraverse(T,PrintElement);printf("___InOrderTraverse Complete. ");
PostOrderTraverse(T,PrintElement);printf("___PostOrderTraverse Complete. ");
InOrderTraverseStack(T,PrintElement);printf("___InOrderTraverseStack Complete. ");
InOrderTraverse_621(T,PrintElement);printf("___InOrderTraverse_621 Complete. ");
return 1;
}

/**//*运行结果,abc##de#g##f###
CreateBiTree succeed at a
CreateBiTree succeed at b
CreateBiTree succeed at c
CreateBiTree succeed at d
CreateBiTree succeed at e
CreateBiTree succeed at g
CreateBiTree succeed at f
CreateBiTree Succeed!
_a__b__c__d__e__g__f____PreOrderTraverse Complete.
_c__b__e__g__d__f__a____InOrderTraverse Complete.
_c__g__e__f__d__b__a____PostOrderTraverse Complete.
_c__b__e__g__d__f__a____InOrderTraverseStack Complete.
_c__b__e__g__d__f__a____InOrderTraverse_621 Complete.
Press any key to continue
另一个运行结果:
-+a##*b##-c##d##/e##f##
CreateBiTree succeed at -
CreateBiTree succeed at +
CreateBiTree succeed at a
CreateBiTree succeed at *
CreateBiTree succeed at b
CreateBiTree succeed at -
CreateBiTree succeed at c
CreateBiTree succeed at d
CreateBiTree succeed at /
CreateBiTree succeed at e
CreateBiTree succeed at f
CreateBiTree Succeed!
_-__+__a__*__b__-__c__d__/__e__f____PreOrderTraverse Complete.
_a__+__b__*__c__-__d__-__e__/__f____InOrderTraverse Complete.
_a__b__c__d__-__*__+__e__f__/__-____PostOrderTraverse Complete.
_a__+__b__*__c__-__d__-__e__/__f____InOrderTraverseStack Complete.
_a__+__b__*__c__-__d__-__e__/__f____InOrderTraverse_621 Complete.
Press any key to continue
*/
