#include "stdio.h"
#include<malloc.h>
typedef struct BiTNode{
char data; /*结点的数据域*/
struct BiTNode *lchild , *rchild; /*指向左孩子和右孩子*/
} BiTNode , *BiTree;
/*创建一棵二叉树*/
void CreatBiTree(BiTree *T){
char c;
scanf("%c",&c);
if(c == ' ') *T = NULL;
else{
*T = (BiTNode * )malloc(sizeof(BiTNode)); /*创建根结点*/
(*T)->data = c; /*向根结点中输入数据*/
CreatBiTree(&((*T)->lchild)); /*递归地创建左子树*/
CreatBiTree(&((*T)->rchild)); /*递归地创建右子树*/
}
}
/*遍历二叉树*/
void PreOrderTraverse(BiTree T ){
if(T){ /*递归结束条件,T为空*/
printf("%3c",T->data); /*访问根结点,将根结点内容输出*/
PreOrderTraverse(T->lchild); /*先序遍历T的左子树*/
PreOrderTraverse(T->rchild); /*先序遍历T的右子数*/
}
}
void visit(BiTree p) {
printf("%3c",p->data);
}
void layerOrderTraverse(BiTree T)
{
BiTree queue[20],p;
int front,rear;
if(T!=NULL)
{
queue[0] = T; /*将根结点的指针(地址)入队列*/
front = -1;
rear = 0;
while(front<rear) /*当队列不为空时进入循环*/
{
p = queue[++front]; /*取出队头元素*/
visit(p); /*访问p指向的结点元素*/
if(p->lchild!=NULL) /*将p结点的左孩子结点指针入队列*/
queue[++rear] = p->lchild;
if(p->rchild!=NULL) /*将p结点的右孩子结点指针入队列*/
queue[++rear] = p->rchild;
}
}
}
main()
{
BiTree T = NULL; /*最开始T指向空*/
printf("Input some characters to create a binary tree\n");
CreatBiTree(&T); /*创建二叉树*/
printf("\nThe squence of layerorder traversaling binary tree\n");
layerOrderTraverse(T);
getchar();
getchar();
}