求C代码,非递归实现二叉树的先序和中序遍历,急急!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/15 20:26:19
请根据如下算法编写,一定要是C语言版的,不要C++的,最好每步都有注释,写的好的话再追加50分
Status PreOrderTraverse(BiTree T,Status( *visit)(TElemType& e)){
InitStack(S); p=T;
While(p || !StackEmpty(S)){
if (p) {if (!visit(p->data)) return ERROR;
Push(S,p);p=p->lchild;}
else{
Pop(S,p);
p=p->rchild;
}//else
}//while
return OK;
}

给你编了个,先序递归建树的。
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;//树类型
typedef struct SqStack
{
BiTNode *base;
BiTNode *top;
int stacksize;
} SqStack;//栈类型
void InitStack(SqStack *S)//创建
{
S->base=(BiTNode*)malloc(STACK_INIT_SIZE*sizeof(BiTNode));
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
}
void Push(SqStack *S,BiTNode e)//进栈
{
if(S->top-S->base>=S->stacksize)
{
S->base=(BiTNode*)realloc(S->base,
(S->stacksize+STACKINCREMENT)*sizeof(BiTNode));
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
*(S->top)=e;
S->top++;
}
BiTNode