二叉树的生成与遍历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;