根据字符数组来建立二叉树,并简单实现了三种遍历
#include <stdio.h>
#include <stdlib.h>
//二叉树结构
typedef struct BiTNode {
char data;
struct BiTNode *lchild,*rchild; //左右孩子指针
} BiTNode, *BiTree;
//前序法创建二叉树
void CreateBiTree(BiTree &T,char* &str) {
if(*str++=='#')
T=NULL;
else {
T=(BiTNode*)malloc(sizeof(BiTNode));
if(!T) exit(1);
T->data=*(str-1);
CreateBiTree(T->lchild,str); //构造左子树
CreateBiTree(T->rchild,str); //构造右子树
}
}
//前序遍历
void PreOrderTraverse(BiTree T) {
if(T){
printf("%c ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//中序遍历
void InOrderTraverse(BiTree T) {
if(T){
InOrderTraverse(T->lchild);
printf("%c ",T->data);
InOrderTraverse(T->rchild);
}
}
//后序遍历
void PostOrderTraverse(BiTree T) {
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c ",T->data);
}
}
int main()
{
BiTree T;
char* ch;
char case1[]={"ABC##DE#G##F###"}; //用于创建二叉树的字符数组
ch=case1;
CreateBiTree(T,ch);
PreOrderTraverse(T);
printf("\n");
InOrderTraverse(T);
printf("\n");
PostOrderTraverse(T);
return 0;
}