二叉樹的基本操作(源代碼)
#include "stdio.h"
#include "malloc.h"
#define MAX 100
typedef struct node{
int date;
struct node *lchild,*rchild;
}bitnode,*bitree;
bitree createbitree(bitree bt){
int m;
printf("m=");
scanf("%d",&m);
if(m==-1)
bt=NULL;
else{
bt=(bitnode *)malloc(sizeof(bitnode));
bt->date=m;
bt->lchild=createbitree(bt->lchild);
bt->rchild=createbitree(bt->rchild);
}
return bt;
}//樹的建立
void leveltraverse(bitree bt){
bitree queue[MAX],p=bt;
int rear=0,front=0;
if(p!=NULL){
queue[++rear]=p;
while(frontdate);
if(p->lchild!=NULL)
queue[++rear]=p->lchild;
if(p->rchild!=NULL)
queue[++rear]=p->rchild;
}
}
}//樹的層次遍歷
void preordertraverse(bitree bt){
if(bt!=NULL){
printf("%d\t",bt->date);
preordertraverse(bt->lchild);
preordertraverse(bt->rchild);
}
}//樹的先序遍歷
void inordertraverse(bitree bt){
if(bt!=NULL){
inordertraverse(bt->lchild);
printf("%d\t",bt->date);
inordertraverse(bt->rchild);
}
}//樹的中序遍歷
void postordertraverse(bitree bt){
if(bt!=NULL){
postordertraverse(bt->lchild);
postordertraverse(bt->rchild);
printf("%d\t",bt->date);
}
}//樹的后序遍歷
int bitreedepth(bitree bt){
int h,lh,rh;
if(bt==NULL)
h=0;
else{
lh=bitreedepth(bt->lchild);
rh=bitreedepth(bt->rchild);
if(lh>=rh)
h=lh+1;
else
h=rh+1;
}
return h;
}//求樹的深度
int bitreeleaf(bitree bt){
int m=0;
if(!bt)
return 0;
else if(bt->lchild==NULL&&bt->rchild==NULL)
return 1;
m+=bitreeleaf(bt->lchild)+bitreeleaf(bt->rchild);
return m;
}//求樹的葉子樹
int countbitreenode(bitree bt){
if(!bt)
return 0;
else
return countbitreenode(bt->lchild)+countbitreenode(bt->rchild)+1;
}//求樹的節點數
void OperateBitree(bitree bt){
printf("\n");
printf("The level traversal of the bitree is:\n\t");
leveltraverse(bt);
printf("\n\n");
printf("The preorder traversal of the bitree is:\n\t");
preordertraverse(bt);
printf("\n\n");
printf("The inorder traversal of the bitree is:\n\t");
inordertraverse(bt);
printf("\n\n");
printf("The postorder traversal of the bitree is:\n\t");
postordertraverse(bt);
printf("\n\n");
printf("The number of the bitreenode is %d.\n",countbitreenode(bt));
printf("The depth of the bitree is %d.\n",bitreedepth(bt));
printf("The number of the leaves of the bitree is %d.\n\n",bitreeleaf(bt));
}//樹的基本操作
void main(){
bitree bt;
bt=createbitree(bt);
OperateBitree(bt);
}