#include<stdio.h>
#include<stdlib.h>
typedef struct tree
{
char data;
struct tree *lchild;
struct tree *rchild;
}tree;
tree* create()
{
char ch;
tree *T;
scanf("%c",&ch);//千万不能加\n,不然计算机不知道你究竟什么时候结束输入
if(ch=='#')
return NULL;
else
{
T = (tree*)malloc(sizeof(tree));
T->data = ch;
T->lchild = create();
T->rchild = create();
return T;
}
}
void preorder(tree *T)//前序遍历:根左右
{
if(T==NULL)
return ;
else
{
printf("%c ",T->data );
preorder(T->lchild );
preorder(T->rchild );
}
}
void inorder(tree *T)//中序遍历:左根右
{
if(T==NULL)
return ;
else
{
inorder(T->lchild );
printf("%c ",T->data );
inorder(T->rchild );
}
}
void postorder(tree *T)//后序遍历:左右根
{
if(T==NULL)
return ;
else
{
postorder(T->lchild );
postorder(T->rchild );
printf("%c ",T->data );
}
}
void level(tree *T)//层次遍历
{
tree *pos[20];
int front = 0;
int rear = 19;
while(rear)//清空数组
{
pos[rear] = NULL;
rear--;
}
pos[front] = T;
rear++;//rear后移一位;
while(pos[front]!=NULL)
{
printf("%c ",pos[front]->data );
if(pos[front]->lchild !=NULL)
{
pos[rear]=pos[front]->lchild ;
rear++;
}
if(pos[front]->rchild != NULL)
{
pos[rear]=pos[front]->rchild ;
rear++;
}
front++;
}
}
int main()
{
tree *T = create();
preorder(T);
printf("\n");
inorder(T);
printf("\n");
postorder(T);
printf("\n");
level(T);
return 0;
}
编译运行结果: