#include "stdio.h"
#include "malloc.h"
typedef struct bitnode
{
int data;
struct bitnode *lchild;
struct bitnode *rchild;
}bitnode,*bitree;
void create(bitree *t)
{ int e;
scanf("%d",&e);
if(e==0)
*t=NULL;
else{
*t=(bitree)malloc(sizeof(bitnode));
if(!(*t))
return ;
(*t)->data=e;
create(&((*t)->lchild));
create(&((*t)->rchild));
}
}
void preorder(bitree t)
{
if(t==NULL)
return ;
else
{printf("%5d",t->data);
preorder(t->lchild);
preorder(t->rchild);
}
}
void inorder(bitree t)
{ if(t==NULL)
return ;
else
{inorder(t->lchild);
printf("%5d",t->data);
inorder(t->rchild);
}
}
void postorder(bitree t)
{ if(t==NULL)
return ;
else
{postorder(t->lchild);
postorder(t->rchild);
printf("%5d",t->data);
}
}
void main()
{
bitree t;
t=NULL;
create(&t);
preorder(t); //先序输出
printf("\n\n");
inorder(t); //中序输出
printf("\n\n");
postorder(t); //后序输出
printf("\n");
}
注意:此二叉树的创建在输入节点时,必须要按所要创建二叉树的先序遍历输入,如果某棵子树的左孩子,右孩子或者左右孩子为空时,在输入时必须要用"0"代替,否则程序无法得到所要的结果.
此程序在创建和序遍历输出时均用到了递归.