数据结构二叉树遍历及线索化后各种操作(绝对无错)

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

实验二二叉树的存储结构及各种运算的实现第一题:

#include "stdio.h"

#include "malloc.h"

#define maxsize 66

typedef int datatype;

typedef struct node

{

datatype data ;

struct node *lchild,*rchild;

} bitree;

bitree *Q[maxsize];

bitree *creatree()

{

char ch;

int front,rear;

bitree *root,*s;

root=NULL;

front=1;rear=0;

ch=getchar();

while (ch!='#')

{

s=NULL;

if(ch!='@')

{

s=malloc(sizeof(bitree));

s->data=ch;

s->lchild=NULL;

s->rchild=NULL;

}

rear++;

Q[rear]=s;

if(rear==1)

root=s;

else

{

if (s&&Q[front])

if(rear%2==0)

Q[front]->lchild=s;

else

Q[front]->rchild=s;

if(rear%2==1)

front++;

}

ch=getchar();

}

return root;

}

preorder(bitree *t) //前{

if (t)

{

printf(" %c ",t->data);

preorder(t->lchild);

preorder(t->rchild);

}

}

inorder(bitree *t) //中{

if (t)

{

inorder(t->lchild);

printf(" %c ",t->data);

inorder(t->rchild);

}

}

postorder(bitree *t) //后{

if (t)

{

postorder(t->lchild);

postorder(t->rchild);

printf(" %c ",t->data);

}

}

int height(bitree *t) //高度{

int hl,hr;

if(!t) return 0;

else

{

hl=height(t->lchild);

hr=height(t->rchild);

return ((hl>hr?hl:hr)+1);

}

}

int leaf(bitree *t) //叶子{

static int s;

if(t)

{

leaf(t->lchild);

leaf(t->rchild);

if(t->lchild==NULL&&t->rchild==NULL)

s=s+1;

}

return s;

}

main()

{

bitree *t;

int x,y;

printf("输入数据,以#做结尾:\n");

t=creatree();

printf("preorder:\t");preorder(t);

printf("\ninorder:\t");inorder(t);

printf("\npostorder:\t");postorder(t);

x=height(t);

y=leaf(t);

printf("\n高度:%d",x);

printf("\n叶子:%d",y);

printf("\n");

}

第二题:

#include

#include

#define maxsize 40

typedef struct node{

char data;

struct node *lchild,*rchild;

int ltag,rtag;

} bitree;

bitree *Q[maxsize]; /*队列*/

bitree *pre=NULL;

bitree *creatree()

{ char ch;

int front,rear; /*队头、队尾*/

bitree *root,*s;

root=NULL; /*空树*/

front=1; rear=0; /*空队*/

ch=getchar();

while(ch!='#')

{ s=NULL;

if(ch!='@') /*建立新结点*/

{ s=(bitree *)malloc(sizeof(bitree));

s->data=ch;

s->lchild=s->rchild=NULL;

s->ltag=s->rtag=0;

}

rear++;

相关文档
最新文档