按先序遍历的序列从创建一个二叉树,当然你也可以按中序,后序序列来创建二叉树,当一个结点的左孩子或右孩子为空时,用#d代替该结点。
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode//结点结构
{
char data;//结点数据
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T)
{
char ch;
scanf("%c",&ch);
if(ch=='#')
*T=NULL;
else
{
*T=(BiTree)malloc(sizeof(BiTNode));
(*T)->data=ch;
CreateBiTree(&(*T)->lchild);//建立左子树
CreateBiTree(&(*T)->rchild);//建立右子树
}
}
void PreOrderTraverse(BiTree T)//先序遍历
{
if(T==NULL)
return;
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
void InOrderTraverse(BiTree T)//中序遍历
{
if(T==NULL)
return;
InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
}
void PostOrderTraverse(BiTNode *root)//后序遍历
{
if(root!=NULL)
{
PostOrderTraverse(root->lchild);
PostOrderTraverse(root->rchild);
printf("%c",root->data);
}
}
int main()
{
BiTree root=NULL;
CreateBiTree(&root);
PreOrderTraverse(root);
printf("\n");
InOrderTraverse(root);
printf("\n");
PostOrderTraverse(root);
return 0;
}