头文件
#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED
#define OVERFLOW -2
#define OK 1
typedef char TElementType;
typedef int Status;
typedef struct BiTNode{
TElementType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*Bitree;
Status InOrderTraverse(Bitree T, Status(*visit)(TElementType e));
Status CreateBitree(Bitree &T);
Status PrintElement(TElementType e);
#endif // HEAD_H_INCLUDED
.cpp文件
#include<stdlib.h>
#include<stdio.h>
#include"head.h"
Status InOrderTraverse(Bitree T, Status(*PrintElement)(TElementType e)){ //中序遍历
if (T)
{
InOrderTraverse(T->lchild,PrintElement);
PrintElement(T->data);
InOrderTraverse(T->rchild,PrintElement);
}
}
//------------我是华丽丽的分割线----------------
Status CreateBitree(Bitree &T)//读入字符并创建二叉树
{
TElementType ch;
scanf("%c",&ch);
if(ch=='#') {T=NULL;}
else
{
if(!(T=(BiTNode *)malloc (sizeof(BiTNode)))) exit(OVERFLOW);
T->data=ch;
CreateBitree(T->lchild);
CreateBitree(T->rchild);
}
return OK;
}
//------------我是华丽丽的分割线----------------
Status PrintElement(TElementType e)//打印数据
{
if (e!='#')
{
printf("%c\t",e);
}
return OK;
}
主函数
#include<stdlib.h>
#include<stdio.h>
#include"head.h"
Status a;
Bitree T;
int main()
{
printf("开始构建完全二叉树,方法:先序遍历法。\n请按正确顺序完整输入数据,以井号键结束\n");
a=CreateBitree(T);
if (a) printf("创建二叉树完成\n");
printf("开始以中序遍历法打印二叉树\n");
InOrderTraverse(T,PrintElement);
printf("\n打印完毕,程序结束\n");
return 0;
}