1.定义类型
2.先序 中序 后序
#include <stdio.h>
#include <stdlib.h>
struct BTNode
{
int data;//数据域
struct BTNode * pLChild; // p 代表指针 L 代表左 Child代表孩子
struct BTNode * pRChild;
};
void PreTraverseBTree(struct BTNode *);
void InTraverseBTree(struct BTNode *);
void PostTraverseBTree(struct BTNode *);
//返回根节点的地址
struct BTNode * CreateBTree(int val){
BTNode * btNode = (struct BTNode *)malloc(sizeof(struct BTNode));
btNode->data = val;
btNode->pLChild = NULL;
btNode->pRChild = NULL;
return btNode;
}
int main(void)
{
int rootData = 1;
struct BTNode * pT = CreateBTree(rootData);
struct BTNode * pLChild = CreateBTree(2);
struct BTNode * pRChild = CreateBTree(3);
pT->pLChild = pLChild;
pT->pRChild = pRChild;
printf("-------------先序输出---------------\n");
PreTraverseBTree(pT);
printf("-------------中序输出---------------\n");
InTraverseBTree(pT);
printf("-------------后序输出---------------\n");
PostTraverseBTree(pT);
return 0;
}
//先序
void PreTraverseBTree(struct BTNode * pT){
//先访问根节点 再访问左节点 最后访问右子数
printf("%d\n",pT->data);//输出根节点数据
if(pT != NULL){
if(pT->pLChild != NULL)
{
PreTraverseBTree(pT->pLChild);
}
if(pT->pRChild != NULL){
PreTraverseBTree(pT->pRChild);
}
}
}
//中序
void InTraverseBTree(struct BTNode * pT){
//先访问左 再访问根节点 最后访问右子数
if(pT != NULL){
if(pT->pLChild != NULL)
{
PreTraverseBTree(pT->pLChild);
}
printf("%d\n",pT->data);//输出根节点数据
if(pT->pRChild != NULL){
PreTraverseBTree(pT->pRChild);
}
}
}
//后序
void PostTraverseBTree(struct BTNode * pT){
//先访问左 再访右根节点 最后访问根
if(pT != NULL){
if(pT->pLChild != NULL)
{
PreTraverseBTree(pT->pLChild);
}
if(pT->pRChild != NULL){
PreTraverseBTree(pT->pRChild);
}
printf("%d\n",pT->data);//输出根节点数据
}
}