您的位置:首页 > 其它

二叉树的遍历算法 递归算法

2010-10-10 22:52 246 查看
////////////////////////////////////////////
//二叉树的遍历算法 递归算法 			  //
//Author:Wang Yong				  		  //
//Date:	2010.8.19				  		  //
////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>

typedef char ElemType;
///////////////////////////////////////////

//定义树的结点类型

typedef struct BNode
{
ElemType data;
struct BNode *lchild,*rchild;
};
///////////////////////////////////////////

//二叉树的创建

BNode *CreatBitTree()
{
BNode *p;
char c;
scanf("%c",&c);
if(c == '#') p = NULL; //截止二叉树的建立
else
{
p = (BNode *) malloc(sizeof(BNode)); //申请结点空间
p->data = c;
p->lchild = CreatBitTree();
p->rchild = CreatBitTree();
}
return  p;
}

////////////////////////////////////////////

//二叉树的先序遍历

void  PreOrderTraverse(BNode *p)
{
if(p != NULL)
{
printf("%c*",p->data);
PreOrderTraverse(p->lchild);
PreOrderTraverse(p->rchild);
}
}

/////////////////////////////////////////////

//二叉树的中序遍历

void InOrderTraverse(BNode *p)
{
if(p != NULL)
{
InOrderTraverse(p->lchild);
printf("%c*",p->data);
InOrderTraverse(p->rchild);
}
}

//////////////////////////////////////////////

//二叉树的后序遍历

void PostOrderTraverse(BNode *p)
{
if(p != NULL)
{
PostOrderTraverse(p->lchild);
PostOrderTraverse(p->rchild);
printf("%c*",p->data);
}
}

/////////////////////////////////////////////

int main()
{
BNode *tree;
tree = CreatBitTree();
PreOrderTraverse(tree);
printf("\n");
InOrderTraverse(tree);
printf("\n");
PostOrderTraverse(tree);
printf("\n");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: