部分代码(未验证)
/*本文件中写了树的基本函数,包含前序遍历、中序遍历、后续遍历*/
#include <stdio.h>
typedef char TelmenType;
/*普通二叉树*/
typedef struct BiTNode
{
TelmenType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
typedef enum {Link, Tread} PointerTag;
typedef struct BiThrNode//线性二叉树
{
TelmenType data;
struct BiThrNode *lchild, *rchild;
PointerTag LTag;
PointerTag RTag;
}BiThrNode, *BiThrTree;
int main()
{
return 0;
}
/*creat a binary Tree*/
void CreatBiTree(BiTree *T)
{
TelmenType ch;
scanf("%c", &ch);
if(ch == '#')
*T = NULL;
else
{
*T = (BiTree)malloc(sizeof(BiTree));
if(!*T)
exit(OVERFLOW);
else
{
(*T)->data = ch;
CreatBiTree(&(*T)->lchild);
CreatBiTree(&(*T)->rchild);
}
}
}
/*前序遍历*/
void PreOrderTraverse(BiTree T)
{
if(T == NULL)
return;
printf("%c",T->data);
PreOrderTraverse(BiTree->lchild);
PreOrderTraverse(BiTree->rchild);
}
/*中序遍历*/
void InOrderTraverse(BiTree T)
{
if(T == NULL)
return;
InorderTraverse(BiTree->lchild);
printf("%c",T->data);
InorderTraverse(BiTree->rchild);
}
/*后续遍历*/
void PostOrderTraverse(BiTree T)
{
if(T == NULL)
return;
PostOrderTraverse(BiTree->lchild);
PostOrderTraverse(BiTree->rchild);
printf("%c",T->data);
}
BiThrTree pre;
void InThreading(BiThrTree p)
{
if(p)
{
InThreading(p->lchild);
if(!p->lchild)
{
p->LTag = Thread;
p->lchild = pre;
}
if(!p->rchild)
{
p->LTag = Thread;
p->lchild = p;
}
pre = p;
InThreading(p->rchild);
}
}