二叉树的遍历(递归算法)
//二叉树的遍历(递归算法)
#include <stdio.h>
#include <malloc.h>
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;//存储二叉树的左孩子和右孩子
}BiTNode,*BiTree;
void createTree(BiTree &T)
{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=1;
T->lchild=(BiTNode *)malloc(sizeof(BiTNode));
T->lchild->data=2;
T->lchild->lchild=(BiTNode *)malloc(sizeof(BiTNode));
T->lchild->lchild->data=4;
T->lchild->lchild->lchild=NULL;
T->lchild->lchild->rchild=NULL;
T->lchild->rchild=(BiTNode *)malloc(sizeof(BiTNode));
T->lchild->rchild->data=5;
T->lchild->rchild->lchild=(BiTNode *)malloc(sizeof(BiTNode));
T->lchild->rchild->lchild->data=7;
T->lchild->rchild->lchild->lchild=NULL;
T->lchild->rchild->lchild->rchild=NULL;
T->lchild->rchild->rchild=(BiTNode *)malloc(sizeof(BiTNode));
T->lchild->rchild->rchild->data=8;
T->lchild->rchild->rchild->lchild=NULL;
T->lchild->rchild->rchild->rchild=NULL;
T->rchild=(BiTNode *)malloc(sizeof(BiTNode));
T->rchild->data=3;
T->rchild->lchild=NULL;
T->rchild->rchild=(BiTNode *)malloc(sizeof(BiTNode));
T->rchild->rchild->data=6;
T->rchild->rchild->lchild=NULL;
T->rchild->rchild->rchild=NULL;
}
void InitTree(BiTree &root)
{
root = (BiTNode *)malloc(sizeof(BiTNode));
root->data = -1;
root->lchild = NULL;
root->rchild = NULL;
}
void visit(BiTNode* &T)//访问函数
{
printf("%d ",T->data);
}
void PreOrder(BiTree T)//先序遍历(根左右)
{
if(T!=NULL)
{
visit(T);//进行递归来访问节点
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BiTree T)//中序遍历(左根右)
{
if(T!=NULL)
{
InOrder(T->lchild);
visit(T);
InOrder(T->rchild);
}
}
void PostOrder(BiTree T)//后序遍历(左右根)
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
visit(T);
}
}
int main()
{
BiTree Tree;
createTree(Tree);
printf("PreOrder : ");
PreOrder(Tree);
printf("\n");
printf("InOrder : ");
InOrder(Tree);
printf("\n");
printf("PostOrder : ");
PostOrder(Tree);
printf("\n");
return 0;
}