/*
二叉树的遍历,前序遍历,中序遍历,后序遍历。
*/
#include<stdio.h>
#include<stdlib.h>
#define null 0
//定义结构体
struct BinaryTree
{
char data;
struct BinaryTree *Lchild;
struct BinaryTree *Rchild;
};
typedef struct BinaryTree BiTree;
//建立二叉树
BiTree * createBiTree(BiTree *, int);
//前序遍历
void PreOrder(BiTree *);
//中序遍历
void MidOrder(BiTree *);
//后序遍历
void PostOrder(BiTree *);
//输出函数
void Visit(BiTree *);
int main()
{
BiTree bt, *root;
printf("printf code:
"); /*输入格式为:先输入根节点,再输入
左子树,右子树,没有则用@代替。*/
root = createBiTree(&bt, 0);
printf("前序遍历的结果是:");
PreOrder(root);
printf("
");
printf("中序遍历的结果是:");
MidOrder(root);
printf("
");
printf("后序遍历的结果是:");
PostOrder(root);
printf("
");
return 0;
}
BiTree * createBiTree(BiTree *s, int k)
{
char c;
BiTree *p, *t;
scanf("%c", &c);
if(c != '@')
{
p = (BiTree *)malloc(sizeof(BiTree));
p -> data = c;
p -> Lchild = null;
p -> Rchild = null;
if(k == 0) t = p;
if(k == 1) s -> Lchild = p; /*链接到左子树*/
if(k == 2) s -> Rchild = p; /*链接到右子树*/
createBiTree(p, 1);
createBiTree(p, 2);
}
return t;
}
void PreOrder(BiTree *s)
{
if(s)
{
Visit(s -> data);
PreOrder(s -> Lchild);
PreOrder(s -> Rchild);
}
}
void MidOrder(BiTree *s)
{
if(s)
{
MidOrder(s -> Lchild);
Visit(s -> data);
MidOrder(s -> Rchild);
}
}
void PostOrder(BiTree *s)
{
if(s)
{
PostOrder(s -> Lchild);
PostOrder(s -> Rchild);
Visit(s -> data);
}
}
void Visit(char e)
{
printf("%c", e);
}