结构代码
typedef struct BiTNode{
char data;//数据域
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
1、建立二叉树 ,#表示空树
void CreateBitree(BiTree *T){
char ch;
//输入节点的数据
scanf("%c",&ch);
//当输入的数据为#时,代表是空结点 ,没有数据
if(ch=='#'){
*T=NULL;
} else{
//分配节点空间
*T=(BiTree) malloc(sizeof(BiTNode));
if(!*T)
exit(-1);
(*T)->data=ch;//生成根节点
//构造左子树
CreateBitree(&(*T)->lchild);
//构造右子树
CreateBitree(&(*T)->rchild);
}
}
为了区别是否有左右孩子,用#来区别,当输入#时,用NULL占位,表示没有左孩子或者右孩子,如图所示
2、前序遍历算法
void PreOrderTraverse(BiTree T){
if(T==NULL)
return;
//显示节点数据
printf("%c",T->data);
//再先序遍历左子树
PreOrderTraverse(T->lchild);
//最后序遍历左子树
PreOrderTraverse(T->rchild);
}
3、中序遍历算法
void InOrderTraverse(BiTree T){
if(T==NULL)
return;
PreOrderTraverse(T->lchild);
printf("%c",T->data);
PreOrderTraverse(T->rchild);
}
5、后序遍历算法
void PostOrderTraverse(BiTree T){
if(T==NULL)
return;
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
printf("%c",T->data);
}
测试代码
#include <stdio.h>
#include <malloc.h>
//函数声明
void CreateBitree(BiTree *T);
void PreOrderTraverse(BiTree T);
void InOrderTraverse(BiTree T);
void PostOrderTraverse(BiTree T);
int main()
{
BiTree T;
//创建二叉树
CreateBitree(&T);
//前序遍历二叉树
printf("前序遍历二叉树 \n");
PreOrderTraverse(T);
printf("\n");
//中序遍历二叉树
printf("中序遍历二叉树 \n");
InOrderTraverse(T);
printf("\n");
//后序遍历二叉树
printf("后序遍历二叉树 \n");
PostOrderTraverse(T);
printf("\n");
}
测试结构