16,472
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <malloc.h>
//二叉树类型定义
typedef int ElemType;
typedef struct tree
{
ElemType data;
struct tree *lchild;
struct tree *rchild;
}biTreeNode, *biTree;
/*
*功能:创建二叉树(先序)
*参数:二叉树根结点地址的地址
*/
void createBiTree(biTree *root)
{
ElemType tmp;
scanf("%d", &tmp);
if(tmp == 0)
{
*root = NULL;
return;
}
*root = (biTree)malloc(sizeof(biTreeNode));
if(*root == NULL)
return;
(*root)->data = tmp;
createBiTree(&(*root)->lchild);
createBiTree(&(*root)->rchild);
}
/*
*功能:访问二叉树结点
*参数:二叉树根结点地址
*/
void visit(biTree root)
{
printf("%d ", root->data);
}
/*
*功能:先序遍历二叉树
*参数:二叉树根结点地址
*/
void preOrderTraverse(biTree root)
{
if(root == NULL)
return;
visit(root);
preOrderTraverse(root->lchild);
preOrderTraverse(root->rchild);
}
/*
*功能:中序遍历二叉树
*参数:二叉树根结点地址
*/
void inOrderTraverse(biTree root)
{
if(root == NULL)
return;
inOrderTraverse(root->lchild);
visit(root);
inOrderTraverse(root->rchild);
}
/*
*功能:后序遍历二叉树
*参数:二叉树根结点地址
*/
void postOrderTraverse(biTree root)
{
if(root == NULL)
return;
postOrderTraverse(root->lchild);
postOrderTraverse(root->rchild);
visit(root);
}
int main()
{
biTree tree;
createBiTree(&tree);
printf("先序遍历:\n");
preOrderTraverse(tree);
printf("\n中序遍历:\n");
inOrderTraverse(tree);
printf("\n后序遍历:\n");
postOrderTraverse(tree);
printf("\n");
return 0;
}
1 2 4 8 0 0 9 0 0 5 10 0 0 11 0 0 3 6 12 0 0 13 0 0 7 14 0 0 15 0 0
先序遍历:
1 2 4 8 9 5 10 11 3 6 12 13 7 14 15
中序遍历:
8 4 9 2 10 5 11 1 12 6 13 3 14 7 15
后序遍历:
8 9 4 10 11 5 2 12 13 6 14 15 7 3 1
数据要自己输入