#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int Elemtype;
typedef int Status;
/*树的结构体*/
typedef struct _Tree
{
Elemtype data;
struct _Tree* Lchild;//左子树
struct _Tree* Rchild;//右子树
}Tree;
/*创建树*/
//要注意到创建树的时候,输入的数据是根据先序的顺序插入的。
//如树: 1
// 2 3
// 4 5 6 7
//则要输入:124005003600700
Status createTree(Tree** tree)
{
Elemtype _data;
printf("【创建树】\n请输树中每个结点的数据,其中输入0为创建空树:");
scanf("%d", &_data);
if (_data == 0)
{
*tree = NULL;//创建空树
}
else
{
*tree = (Tree*)malloc(sizeof(_Tree));
if (!(*tree))
{
return ERROR;
}
(*tree)->data = _data;
createTree(&(*tree)->Lchild);
createTree(&(*tree)->Rchild);
}
return OK;
}
/*前序遍历*/
Status preOrderTraverse(Tree* tree)
{
if (tree!=NULL)
{
printf("%d ", tree->data);
preOrderTraverse(tree->Lchild);
preOrderTraverse(tree->Rchild);
}
else
{
return ERROR;
}
}
/*中序遍历*/
Status inOrderTravese(Tree* tree)
{
if (tree != NULL)
{
inOrderTravese(tree->Lchild);
printf("%d ", tree->data);
inOrderTravese(tree->Rchild);
}
else
{
return ERROR;
}
}
/*后序遍历*/
Status postOrderTraverse(Tree* tree)
{
if (tree != NULL)
{
postOrderTraverse(tree->Lchild);
postOrderTraverse(tree->Rchild);
printf("%d ", tree->data);
}
else
{
return ERROR;
}
}
int main()
{
Tree* pTree;
createTree(&pTree);
printf("先序遍历:");
preOrderTraverse(pTree);
printf("\n中序遍历:");
inOrderTravese(pTree);
printf("\n后序遍历:");
postOrderTraverse(pTree);
return OK;
}
二叉树的实现
最新推荐文章于 2022-07-04 20:36:06 发布