二叉树的生成与遍历

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include "btree.h"

#include "sstack.h"

typedef struct stack_tag

{

elemtype *elem;

int top;

int size;

}SQSTACK;

int InitSqstack(SQSTACK *S,int n);

void DestroySqstack(SQSTACK *S);

int IsSqstackEmpty(SQSTACK S);

int IsSqstackFull(SQSTACK S);

int Push(SQSTACK *S,elemtype e);

int Pop(SQSTACK *S,elemtype *e);

int InitSqstack(SQSTACK *S, int n)

{

S->elem=(elemtype *)malloc(n*sizeof(elemtype)); if(S->elem==NULL)return 0;

S->size=n;

S->top=-1;

return 1;

}

void DestroySqstack(SQSTACK *S)

{

free(S->elem);

S->elem=NULL;

S->top=-1;

S->size=0;

}

int IsSqstackEmpty(SQSTACK S)

{

return S.top==-1;

}

int IsSqstackFull(SQSTACK S)

{

return S.top==S.size-1;

}

int Push(SQSTACK *S,elemtype e)

{

if(IsSqstackFull(*S))return 0;

S->top++;

S->elem[S->top]=e;

return 1;

}

int Pop(SQSTACK *S,elemtype *e)

{

if(IsSqstackEmpty(*S)) return 0;

*e=S->elem[S->top];

S->top--;

return 1;

}

typedef struct thrbtreenode

{

char data;

int ltag,rtag;

struct thrbtreenode *lchild,*rchild;

} THRBTREENODE, *THRBTREENODEPTR,*THRBTREE; typedef THRBTREENODEPTR elemtype;

typedef struct

{

int x,y;

}BTREENODEPOS;

#define MAXCOUNT 32

void InitBtreeNodePos();

THRBTREE CreateBtree2(char *str);

void DestroyBtree(THRBTREE root);

void ShowBtree(THRBTREE root,int index);

void PreOrderThr(THRBTREE p);

THRBTREE InOrderThread(THRBTREE root);

void InOrderThr(THRBTREE p);

THRBTREE PreOrderThread(THRBTREE root);

#include

#include

#include

#include

#include

#include "btree.h"

#include "sstack.h"

THRBTREENODEPTR pre;

BTREENODEPOS btnpos[MAXCOUNT];

void InitBtreeNodePos(void)

{

int i;

for(i=0;i<16;i++)

{

btnpos[16+i].x=20+i*40;

btnpos[16+i].y=480-30;

}

for(i=15;i>=1;i--)

{

btnpos[i].x=(btnpos[2*i].x+btnpos[2*i+1].x)/2;

btnpos[i].y=btnpos[2*i].y-80;

}

}

THRBTREE CreateBtree1(char *str)

{

THRBTREE root=NULL;

THRBTREENODEPTR p;

int tag,i,len;

int mark;/* 1--characters,2--(,3--,4--) */

SQSTACK s;

if(str[0]==0)return root;

root=(THRBTREENODEPTR)malloc(sizeof(THRBTREENODE)); if(root==NULL)return root;

root->data=str[0];

root->lchild=root->rchild=NULL;

root->ltag=root->rtag=0;

len=strlen(str);

InitSqstack(&s,len);

p=root;

mark=1;

for(i=1;str[i]!=0;i++)

switch(str[i])

{

case '(':

if(mark==2)

{

DestroyBtree(root);

printf("illegal global list!");

return NULL;

相关文档
最新文档