链式二叉树的C语言代码

来源:互联网 发布:网络连接异常 编辑:程序博客网 时间:2024/06/02 04:45
#include <stdio.h>
#include <malloc.h>




//构造数据类型
struct  BTNode{
 char data;
struct   BTNode  *pLchild;  //建立一个左指针域
struct   BTNode  *pRchild;  //建立一个右指针域


} ;


//函数声明
struct  BTNode  * CreateBTree();
void  PreTraverseBTree(struct  BTNode  *); 
void  InTraverseBTree(struct  BTNode  *); 
void  PostTraverseBTree(struct  BTNode  *); 


//主函数
int main()
{
struct  BTNode  *pT=CreateBTree();//建立一个二叉树,将根节点赋给pT
printf("先序遍历的结果:\n");
PreTraverseBTree(pT);   //先序遍历
printf("中序遍历的结果:\n");
InTraverseBTree(pT);    //中序遍历
printf("后序遍历的结果:\n");
PostTraverseBTree(pT); //后序遍历


return 0;
}


//建立二叉树
struct  BTNode  * CreateBTree()
{
struct  BTNode  *pA=(struct  BTNode*)malloc(sizeof(struct  BTNode));  //构造出指向数据的指针
struct  BTNode  *pB=(struct  BTNode*)malloc(sizeof(struct  BTNode));
struct  BTNode  *pC=(struct  BTNode*)malloc(sizeof(struct  BTNode));
struct  BTNode  *pD=(struct  BTNode*)malloc(sizeof(struct  BTNode));
struct  BTNode  *pE=(struct  BTNode*)malloc(sizeof(struct  BTNode));


pA->data='A'; //赋值
pB->data='B';
pC->data='C';
pD->data='D';
pE->data='E';


//节点之间建立联系
pA->pLchild=pB;
pA->pRchild=pC;
pB->pLchild=pB->pRchild=NULL;
pC->pLchild=pD;
pC->pRchild=NULL;
pD->pLchild=NULL;
pD->pRchild=pE;
pE->pLchild=pE->pRchild=NULL;


return pA;
}


//前序遍历
void  PreTraverseBTree(struct  BTNode  *pT)
{
if(NULL!=pT)
{
printf("%c\n",pT->data);
//递归调用左子树
if(NULL!=pT->pLchild)
{
PreTraverseBTree(pT->pLchild);
}
//递归调用右子树
if(NULL!=pT->pRchild)
{
PreTraverseBTree(pT->pRchild);
}


/*
pT->pLchild->data可以代表整个左子树;
伪算法
根节点->左子树->右子树
*/
}
}


//中序遍历
void  InTraverseBTree(struct  BTNode  *pT)
{
if(NULL!=pT)
{
//递归调用左子树
if(NULL!=pT->pLchild)
{
InTraverseBTree(pT->pLchild);
}
printf("%c\n",pT->data);
//递归调用右子树
if(NULL!=pT->pRchild)
{
InTraverseBTree(pT->pRchild);
}
}


}


//后序遍历
void  PostTraverseBTree(struct  BTNode  *pT)
{
if(NULL!=pT)
{
//递归调用左子树
if(NULL!=pT->pLchild)
{
PostTraverseBTree(pT->pLchild);
}
//递归调用右子树
if(NULL!=pT->pRchild)
{
PostTraverseBTree(pT->pRchild);
}
//调用中子树
printf("%c\n",pT->data);
}


}