二叉树的存储与遍历

typedef char status;
typedef char Telemtype;
#define NULL 0
#define OK   1
typedef struct bitnode{
	Telemtype data;
	struct bitnode *lchild,*rchild;
}bitnode,*bitree;
Creatbitree(bitree &t)
{
//先序创建二叉树
	char ch;
	scanf("%c",&ch);
	if(ch=='*') t=NULL;
	else{
		t=(bitnode *)malloc(sizeof(bitnode));
		if(!t) exit(0);
		t->data=ch;
		Creatbitree(t->lchild);
		Creatbitree(t->rchild);
	}
	return OK;
}


status Leafcount(bitree t)
{
//统计二叉树中叶子结点的个数
	if(!t)
		return 0;
	else if(t->lchild==0&&t->rchild==0)
		     return 1;
	     else 
			 return Leafcount(t->lchild)+Leafcount(t->rchild);
}

status Depth(bitree t)
{
	
//计算该二叉树的深度
	int dl,dr,d;
	if(!t) return 0;
	else 
	{
		///////////#TODO7
		   dl=Depth(t->lchild);
		   dr=Depth(t->rchild);
		   if(dl>=dr)  return d=1+dl;
		   if(dl<dr)   return d=1+dr;
	}
}

status Nodecount(bitree t)
{
//统计二叉树的总的结点数	
	int n,nl,nr;
	if(!t) return 0;
	else
	{
		///////////#TODO8
		nl=Nodecount(t->lchild);
		nr=Nodecount(t->rchild);
		n=1+nl+nr;
	}
	return n;
}

void Preordertree(bitree t)
{
	//先序序列遍历二叉树
	if(t)
	{
		printf("%c",t->data);
		Preordertree(t->lchild);
		Preordertree(t->rchild);
	}
}

void Inordertree(bitree t)
{
	//中序序列遍历二叉树
	if(t)
	{
		Inordertree(t->lchild);
		printf("%c",t->data);
		Inordertree(t->rchild);
	}
}

void Pasttree(bitree t)
{
   //后序序列遍历二叉树
	if(t){
	Pasttree(t->lchild);
	Pasttree(t->rchild);
	printf("%c",t->data);
	}
}
编译执行结果例如以下:
<img src="//img-blog.csdn.net/20140530230219765" alt="" />

posted @ 2016-03-15 12:51  blfshiye  阅读(173)  评论(0编辑  收藏  举报