#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int index=1;
typedef char String[24];
String str;
/*=============用于构造二叉树(存储的数据)===============*/
void StrAssign(String str,char *chars){
int i;
for(i=1;i<=strlen(chars);i++)
str[i]=*(chars+i-1);
}
/*==============创建二叉树结构============================*/
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
/*================按照前序输入二叉树中节点的值==================*/
void CreateBiTree(BiTree *T){
char ch;
ch=str[index++];
if(ch=='#')
*T=NULL;
else{
*T=(BiTree)malloc(sizeof(BiTNode));
(*T)->data=ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
/*=============返回T的深度===========*/
int BiTreeDepth(BiTree T){
int i,j;
if(!T)
return 0;
if(T->lchild)
i=BiTreeDepth(T->lchild);
else
i=0;
if(T->rchild)
j=BiTreeDepth(T->rchild);
else
j=0;
return i>j?i+1:j+1;
}
/*==============先序遍历二叉树========*/
void PreOederTraverse(BiTree T){
if(T==NULL)
return;
printf("%c",T->data);
PreOederTraverse(T->lchild);
PreOederTraverse(T->rchild);
}
/*=============中序遍历二叉树==============*/
void InOrderTraverse(BiTree T){
if(T==NULL)
return;
InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
}
/*=============后序遍历二叉树==============*/
void PostOrderTraverse(BiTree T){
if(T==NULL)
return;
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data);
}
int main(){
BiTree T;
StrAssign(str,"ABDH#K###E##CFI###G#J##");
CreateBiTree(&T);
printf("先序遍历\n");
PreOederTraverse(T);
printf("\n中序遍历\n");
InOrderTraverse(T);
printf("\n后序遍历\n");
PostOrderTraverse(T);
printf("\n二叉树深度%d\n",BiTreeDepth(T));
return 0;
}