简易二叉树建立与遍历
输入ABCDE@F#输出结果为:
前序遍历结果:ABDECF
中序遍历结果:DBEACF
后序遍历结果:DEBFCA
#include<stdio.h>
#include<stdlib.h>
typedef struct BitNode
{
char data;
struct BitNode* lchild;
struct BitNode* rchild;
}BitNode,*Bintree;
Bintree creatbitree(); //创建二叉树
void preordertraverse(BitNode* t); //前序遍历二叉树
void inorder(BitNode *t);
void postorder(BitNode *t);
int main()
{
Bintree bt;
bt=creatbitree();
printf("前序遍历结果:",bt->data);
preordertraverse(bt);
printf("\n中序遍历结果:");
inorder(bt);
printf("\n后序遍历结果:");
postorder(bt);
}
Bintree creatbitree()
{
BitNode *Q[10],*s,*bt;
int front ,rear;char ch;
front=1;rear=0;
ch=getchar();
bt=NULL;
while(ch!='#')
{
s=NULL;
if(ch!='@')
{
s=(BitNode *)malloc(sizeof(BitNode));
s->data=ch;s->lchild=s->rchild=NULL;
}
rear++;
Q[rear]=s;
if(rear==1) //当队尾为1时s为根接点,赋给bt
{
bt=s;
//printf("%c",bt->data);
}
else{
if(s!=NULL&&Q[front]!=NULL)
{
if(rear%2==0) //队尾为偶数时新结点为左孩子
Q[front]->lchild=s;
else
Q[front]->rchild=s; //否则为右孩子
if(rear%2==1)
front++;
}
}
while((ch=getchar())=='\n');
}
return bt;
}
void preordertraverse(Bintree bt)
{
if(bt!=NULL)
{
printf("%c",bt->data);
preordertraverse(bt->lchild);
preordertraverse(bt->rchild);
}
}
void inorder(BitNode *bt)
{
if(bt!=NULL)
{
inorder(bt->lchild);
printf("%c",bt->data);
inorder(bt->rchild);
}
}
void postorder(BitNode *bt)
{
if(bt!=NULL)
{
postorder(bt->lchild);
postorder(bt->rchild);
printf("%c",bt->data);
}
}
[此贴子已经被作者于2018-4-25 11:13编辑过]