C语言实现二叉树数的先序中序和后序遍历
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OK 1;
#define ERROR -1;
/*
* 采用二叉链表表示
*/
typedef struct BTNode {
int data;
BTNode* lchild;
BTNode* rchild;
}BTNode,*BTree;
//声明函数
int initBTree(BTree& T);//先序遍历创建左子树
int pre_visit(BTree &T);//先序遍历
int mid_visit(BTree& T);//中序遍历
int las_visit(BTree& T);//后序遍历
int initBTree(BTree& T){
int ch;
scanf_s("%d",&ch);
if (ch==-1)
{
T = NULL;
}
else
{
if (!(T = (BTNode*)malloc(sizeof(BTNode))))
exit(0);
T->data = ch;
//printf("左子树结点\n");
initBTree(T->lchild);//递归
//printf("右子树结点\n");
initBTree(T->rchild);//递归
return OK;
}
}
int createTree(BTree& T) {
T = (BTNode*)malloc(sizeof(BTNode));
T->lchild = NULL;
T->rchild = NULL;
T->data = 1;
return OK;
}
int pre_visit(BTree& T) {
if (T == NULL) {
return OK;
}
printf("%d\n",T->data);
pre_visit(T->lchild);
pre_visit(T->rchild);
return OK;
}
int mid_visit(BTree& T) {
if (T==NULL)
{
return OK;
}
mid_visit(T->lchild);
printf("%d\n",T->data);
mid_visit(T->rchild);
return OK;
}
int las_visit(BTree& T) {
if (T==NULL)
{
return OK;
}
las_visit(T->lchild);
las_visit(T->rchild);
printf("%d\n",T->data);
return OK;
}
int main() {
BTNode b;
BTree T=&b;
initBTree(T);
//createTree(T);
printf("先序遍历如下\n");
pre_visit(T);
printf("中序遍历如下\n");
mid_visit(T);
printf("后序遍历入下\n");
las_visit(T);
return 0;
}
创建二叉树的时候采用的存储结构为二叉链表的方式,并使用先序遍历访问的方法创建二叉树,遍历的时候采用的是递归的调用