建立一棵二叉树,要求用先序非递归方法遍历二叉树.建立一棵二叉树,要求用"按层遍历"的方法遍历二叉树"的函

2025-03-07 06:34:37
推荐回答(3个)
回答1:

#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OK 1
#define INFEASIBLE -1
#define MAX_TREE_SIZE 100
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef char Status;
typedef char TElemType;
typedef TElemType SqBiTree[MAX_TREE_SIZE];
SqBiTree bt;
//typedef char SElemType;

typedef struct BiTNode{
TElemType data;
struct BiTNode * lchild, * rchild;
}BiTNode, * BiTree;
typedef BiTree SElemType;
typedef struct {
SElemType * base;
SElemType * top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S){
S.base=(SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S.base)exit( OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//初始化

Status StackEmpty(SqStack S)
{
if(S.top==S.base)return TRUE;
return FALSE;
}

Status Push(SqStack &S,SElemType &e){
if(S.top-S.base>=S.stacksize){
S.base=(SElemType * )realloc(S.base,(S.stacksize+STACKINCREMENT) * sizeof(SElemType));
if(!S.base) exit( OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
* S.top++ = e;
return OK;
}//push

Status Pop(SqStack &S,SElemType &e){
if(S.top==S.base)return ERROR;
e= * --S.top;
return OK;
}//Pop

Status CreateBiTree( BiTree &T){
BiTNode * lchild;
BiTNode * rchild;
char ch;
scanf("%c",&ch);
if(ch ==' ')T= NULL;
else{
if(!(T= (BiTNode * )malloc(sizeof(BiTNode))))exit(OVERFLOW);
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}//CreateTree

Status InOrderTraverse(BiTree &T, Status(* Visit)(TElemType e)){
SqStack S;
InitStack(S);
BiTNode * p; p=T;
while(p||!StackEmpty(S)){
if(p){Push(S,p); p = p->lchild;}
else{
Pop(S,p); if(!Visit(p->data)) return ERROR;
p=p->rchild;
}//else
}//while
return OK;
}//InOrderTraverse

//Status (*Visit)(TElemType e){
Status PrintElement(TElemType e){
printf("%c",e);
return OK;
}

void main()
{
SqStack S;
BiTree T;
InitStack (S);
CreateBiTree(T);
BiTNode *p;
InOrderTraverse(T,PrintElement);
printf("%c",T);
}

回答2:

先序非递归建立二叉树 用链表

回答3:

#include