#include <stdio.h>
#include <stdlib.h>
#define max 100
typedef char ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BinTree;
//建立二叉树
void CreateBinTree(BinTree &T){
char ch;
ch=getchar();
if(ch==' ') T=NULL;
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) printf("%c" "结点建立失败!") ;
T->data=ch;
CreateBinTree(T->lchild);
CreateBinTree(T->rchild);
}
}
//遍历二叉树
void LevleOrder(BinTree T){
BinTree Queue[max],p;
int front,rear;
front=rear=0;
if (T)
{
Queue[rear++]=T;
while (front!=rear){
p=Queue[front++];
printf("%c",p->data);
if (p->lchild!=NULL) Queue[rear++]=p->lchild;
if (p->rchild!=NULL) Queue[rear++]=p->rchild; }
}
}
//按要求输出二叉树
void Print_BinTree(BinTree T,int i ) //本题的关键所在, i表示结点所在层次,初次调用时i=0
{
if(T->rchild) Print_BinTree(T->rchild,i+1); //本题的难点,函数递归来建立层次。
for(int j=1;j<=i;j++) printf(" "); //打印i个空格以表示出层次
printf("%c\n",T->data); //打印T元素,换行
if(T->lchild) Print_BinTree(T->lchild,i+1);
}
int main()
{
BinTree T;int i=0;
printf("\n创建二叉树\n");
CreateBinTree (T);
printf("\n层次遍历二叉树 并输出遍历结果\n");
LevleOrder(T);
printf("\n按树形打印输出二叉树\n");
Print_BinTree(T, i);
return 0;
}