分享

/061.二叉树遍历

 C语言与CPP编程 2022-04-29 发布于安徽
#include <stdio.h>

typedef struct bitnode
{
	char data;
	struct bitnode *lchild, *rchild;
}bitnode, *bitree;

void createbitree(t,n)
bitnode ** t;
int *n;
{
	char x;
	bitnode *q;

	*n=*n+1;
	printf(" Input  %d  DATA: ",*n);
	x=getchar();
	if(x!='\n') getchar();

	if (x=='^')
	return;

	q=(bitnode*)malloc(sizeof(bitnode));
	q->data=x;
	q->lchild=NULL;
	q->rchild=NULL;
	*t=q;

	printf("This Address is:%o,Data is:%c, Left Pointer is:%o,Right Pointer is:  %o\n",q,q->data,q->lchild,q->rchild);

	createbitree(&q->lchild,n);
	createbitree(&q->rchild,n);
	return;
}

void visit(e)
bitnode *e;
{
	printf("  Address:  %o,  Data:  %c,  Left Pointer:  %o,  Right Pointer:  %o\n",e,e->data,e->lchild,e->rchild);
}

void preordertraverse(t)
bitnode *t;
{
	if(t)
	{
		visit(t);
		preordertraverse(t->lchild);
		preordertraverse(t->rchild);
		return ;
	}else return ;
}

void countleaf(t,c)
bitnode *t;
int *c;
{
	if(t!=NULL)
  	{
		  if (t->lchild==NULL && t->rchild==NULL)
		  {
		  	*c=*c+1;
		  }
   		countleaf(t->lchild,c);
   		countleaf(t->rchild,c);
  	}
 	return;
}

int treehigh(t)
bitnode *t;
{
	 int lh,rh,h;
 	 if(t==NULL)
	 	h=0;
	 else
	 {
	 	lh=treehigh(t->lchild);
	 	rh=treehigh(t->rchild);
	 	h=(lh>rh ? lh:rh)+1;
	 }

	 return h;
}
main()
{
	bitnode *t; int count=0;
	int n=0;
	clrscr();
	printf("Please initialize the TREE!\n");
	createbitree(&t,&n);

	printf("\n This is TREE Struct:\n");
	preordertraverse(t);

	countleaf(t,&count);
	printf(" This TREE has %d leaves.",count);

	printf("\n High of The TREE is: %d\n",treehigh(t));
	puts("\n Press any key to quit...");
	getch();
}

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约