麻烦大佬帮忙看一下,不知道咋写了
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define NULL 0
#define MAX_TREE_SIZE 100
#define ElemType int
typedef ElemType SqBiTree[MAX_TREE_SIZE];
SqBiTree t;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int CreateBiTree(BiTree &T){
ElemType ch;
scanf("%c",&ch);
if(ch=='#')T=NULL;
else{
if(!(T=new BiTNode))exit(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
void PreOrderTraverse(BiTree T){
if(T){
printf("%c",T->lchild);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}//先序遍历
void InOrderTraverse(BiTree T){
if(T){
InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
}
}//中序遍历
void PostOrderTraverse(BiTree T){
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data);
}
}//后序遍历
int CountLeaf(BiTree T){
int n,m;
if(!T)return 0;
if(!T->lchild &&!T->rchild)return OK;
else{
m=CountLeaf(T->lchild);
n=CountLeaf(T->rchild);
return(m+n);
}//else
}//CountLeaf
int Depth(BiTree T){
int depthLeft,depthRight,depthval;
if(!T)depthval=0;
else{
depthLeft=Depth(T->lchild);
depthRight=Depth(T->rchild);
depthval=(depthLeft>depthRight?depthLeft:depthRight)+1;
}
return depthval;
}//深度
void main(){
BiTree T;
CreateBiTree(T);
printf("先序遍历");
PreOrderTraverse(T);
printf("\n");
printf("中序遍历");
InOrderTraverse(T);
printf("\n");
printf("后序遍历");
PostOrderTraverse(T);
printf("\n");
printf("叶子结点的个数");
CountLeaf(T);
printf("\n");
printf("深度");
Depth(T);
}
所谓先中后,是指
printf("%c",T->data);
的位置
比如
printf("%c",T->data);
InOrderTraverse(T->lchild);
nOrderTraverse(T->rchild);
这是先序