前端之家收集整理的这篇文章主要介绍了
【数据结构】二叉树的递归遍历,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct BiTree
{
ElemType Elem;
BiTree * LChild;
BiTree * RChild;
}BiTree,*PBiTree;
/*建立二叉树*/
PBiTree CreateBiTree();
/*先序遍历二叉树*/
void ProOrderTravel(PBiTree Tree);
/*中序遍历二叉树*/
void InOrderTravel(PBiTree Tree);
/*后序遍历二叉树*/
void PostOrderTravel(PBiTree Tree);
void main()
{
PBiTree BTree = CreateBiTree();
printf("先序排列为:\n");
ProOrderTravel(BTree);
printf("\n中序排列为:\n");
InOrderTravel(BTree);
printf("\n后序排列为:\n");
PostOrderTravel(BTree);
printf("\n");
}
PBiTree CreateBiTree()
{
PBiTree T;
ElemType tmp;
scanf("%c",&tmp);
if (tmp == '#')
{
T = NULL;
return NULL;
}
else
{
T = (PBiTree)malloc(sizeof(BiTree));
T->Elem = tmp;
T->LChild = CreateBiTree();
T->RChild = CreateBiTree();
}
return T;
}
void ProOrderTravel(PBiTree Tree)
{
if (Tree != NULL)
{
printf("%c\t",Tree->Elem);
ProOrderTravel(Tree->LChild);
ProOrderTravel(Tree->RChild);
}
}
void InOrderTravel(PBiTree Tree)
{
if (Tree != NULL)
{
/* 如果有左子树,一直向下寻找 */
if (Tree->LChild != NULL)
{
InOrderTravel(Tree->LChild);
}
printf("%c\t",Tree->Elem);
InOrderTravel(Tree->RChild);
}
}
void PostOrderTravel(PBiTree Tree)
{
if (Tree != NULL)
{
/* 如果有左子树,一直向下寻找 */
if (Tree->LChild != NULL)
{
PostOrderTravel(Tree->LChild);
}
PostOrderTravel(Tree->RChild);
printf("%c\t",Tree->Elem);
}
}