}
return OK; }//CreateBiTree
status visit(TElemType e) {
printf(\ return OK; }//visit
status PreOrderTraverse(BiTreeT,status(*visit)(TElemType e)) //先序遍历二叉树T的递归算法 { if(T) {
if(visit(T->data))
if(PreOrderTraverse(T->lchild,visit)) if(PreOrderTraverse(T->rchild,visit)) return OK; //return ERROR; } else
{ printf(\
return OK; }
}//PreOrderTraverse
status MidOrderTraverse(BiTreeT,status(*visit)(TElemType e)) //中序遍历二叉树T的递归算法 { if(T) {
if(MidOrderTraverse(T->lchild,visit)) if(visit(T->data))
if(MidOrderTraverse(T->rchild,visit)) return OK; //return ERROR; } else { printf(\
return OK;
}
}//MidOrderTraverse
status LastOrderTraverse(BiTreeT,status(*visit)(TElemType e)) //后序遍历二叉树T的递归算法 { if(T) {
if(LastOrderTraverse(T->lchild,visit)) if(LastOrderTraverse(T->rchild,visit)) if(visit(T->data)) return OK; //return ERROR; } else { printf(\
return OK; }
}//LastOrderTraverse
status LeafCount(BiTreeT,int&sum)
{ int a; if(T) {
if(T->lchild)LeafCount(T->lchild,sum); else a=1;
if(T->rchild)LeafCount(T->rchild,sum); else if(a==1)sum++; return OK; //return ERROR; } }
status LevelOrderTraverse(BiTreeT,status(*visit)(TElemType e)) {
LinkQueue Q; BiTree p; if(T) { InitQueue(Q); EnQueue(Q,T);
while(!QueueEmpty(Q))
{ DeQueue(Q,p); printf(\
if(p->lchild)EnQueue(Q,p->lchild); if(p->rchild)EnQueue(Q,p->rchild); } DestroyQueue(Q); }
return OK; }
//-----主体程序部分----- intmain() {
int sum=0; BiTree T; CreateBiTree(T); printf(\先序:\\n\PreOrderTraverse(T,visit); printf(\printf(\中序:\\n\MidOrderTraverse(T,visit);
printf(\printf(\后序:\\n\
LastOrderTraverse(T,visit); printf(\printf(\层序:\\n\
LevelOrderTraverse(T,visit); printf(\LeafCount(T,sum); printf(\叶子数:%d\ return 0; }