#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef char DataType;
//二叉链表存储结构
typedef struct BiTNode
{
DataType data;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode,*BiTree; //BiTNode为结点类型,BiTree为指向二叉链表结点的指针类型
D表示访问根结点
L表示访问根节点的左子树
R表示访问根节点的右子树
//1.DLR 先序遍历
void preorder(BiTree T)
{
if(T)
{
printf("%c",T->data);
preorder(T->lchild);
preorder(T->rchild);
}
}
//2.LDR中序遍历
void inorder(BiTree T)
{
if(T)
{
inorder(T->lchild);
printf("%c",T->data);
inorder(T->rchild);
}
}
//3.LRD后序遍历
void postorder(BiTree T)
{
if(T)
{
postorder(T->lchild);
postorder(T->rchild);
printf("%c",T->data);
}
}
void main()
{
BiTree T=(BiTree)malloc(sizeof(BiTNode));
//初始化一个二叉树,其根节点是A,没有左右孩子
T->data='A';
T->lchild=NULL;
T->rchild=NULL;
preorder(T);
printf("\n");
T->lchild=(BiTree)malloc(sizeof(BiTNode));
T->lchild->data='B';
T->lchild->lchild=NULL;
T->lchild->rchild=NULL;
T->rchild=(BiTree)malloc(sizeof(BiTNode));
T->rchild->data='C';
T->rchild->lchild=NULL;
T->rchild->rchild=NULL;
preorder(T);
printf("\n");
T->lchild->lchild=(BiTree)malloc(sizeof(BiTNode));
T->lchild->lchild->data='D';
T->lchild->lchild->lchild=NULL;
T->lchild->lchild->rchild=(BiTree)malloc(sizeof(BiTNode));
T->lchild->lchild->rchild->data='G';
T->lchild->lchild->rchild->lchild=NULL;
T->lchild->lchild->rchild->rchild=NULL;
T->rchild->lchild=(BiTree)malloc(sizeof(BiTNode));
T->rchild->lchild->data='E';
T->rchild->lchild->lchild=NULL;
T->rchild->lchild->rchild=NULL;
T->rchild->rchild=(BiTree)malloc(sizeof(BiTNode));
T->rchild->rchild->data='F';
T->rchild->rchild->lchild=NULL;
T->rchild->rchild->rchild=NULL;
printf("先序遍历:");
preorder(T);
printf("\n");
printf("中序遍历:");
inorder(T);
printf("\n");
printf("后序遍历:\n");
postorder(T);
}
运行结果