#include <stdio.h>
#include <stdlib.h>
#include "bitree.h"
TElemType Nil='#';
void visit(TElemType s)
{
printf("%c,",s);
}
void input(TElemType &s)
{
scanf("%c",&s);
}
void InitBiTree(BiTree &T)
{ /* 操作结果:构造空二叉树T */
T=NULL;
}
void CreateBiTree(BiTree &T)
{ //按先序次序输入二叉树中结点的值
// 构造二叉链表表示的二叉树T。变量Nil表示空(子)树。
/********** Begin **********/
TElemType e;
scanf("%c",&e);
if(e=='#')
T=NULL;
else{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=e;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
/********** End **********/
}
int BiTreeEmpty(BiTree T)
{ // 初始条件:二叉树T存在。操作结果:若T为空二叉树,则返回TRUE,否则FALSE
/********** Begin **********/
if(T)
return FALSE;
else
return TRUE;
/********** End **********/
}
void ProOrderTraverse(BiTree T,void(*Visit)(TElemType))
{ // 采用二叉链表存储结构,Visit是对数据元素操作的应用函数。
// 先序遍历二叉树T的递归算法,对每个数据元素调用函数Visit
/********** Begin **********/
if(T)
{
Visit(T->data);
ProOrderTraverse(T->lchild,Visit);
ProOrderTraverse(T->rchild,Visit);
}
/********** End **********/
}
void InOrderTraverse(BiTree T,void(*Visit)(TElemType))
{ // 采用二叉链表存储结构,Visit是对数据元素操作的应用函数。
// 中序遍历二叉树T的递归算法,对每个数据元素调用函数Visit
/********** Begin **********/
if(T)
{
InOrderTraverse(T->lchild,Visit);
Visit(T->data);
InOrderTraverse(T->rchild,Visit);
}
/********** End **********/
}
void PostOrderTraverse(BiTree T,void(*Visit)(TElemType))
{ // 初始条件:二叉树T存在,Visit是对结点操作的应用函数
// 操作结果:后序递归遍历T,对每个结点调用函数Visit一次且仅一次
/********** Begin **********/
if(T)
{
PostOrderTraverse(T->lchild,Visit);
PostOrderTraverse(T->rchild,Visit);
Visit(T->data);
}
/********** End **********/
}
void DestoryBiTree(BiTree &T)
{ // 初始条件:二叉树T存在。操作结果:销毁二叉树T
/********** Begin **********/
if(T) // T不空
{
DestoryBiTree(T->lchild);
DestoryBiTree(T->rchild);
free(T);
}
/********** End **********/
}