#include <stdio.h>
#include <malloc.h>
typedef struct op //定义子树结构
{
int data;
struct op *lchild;
struct op *rchild;
}treestruct;
treestruct *createtree() //这里这种表达形式意思是bittree类型的函数 最终要返回bittree类型的值
{
treestruct *tree = NULL; //定义并初始化子树
int num;
scanf("%d",&num); //给每个节点传入一个值 一定要按照从左到右 从上到下的顺序读入数据
if(num > 0)
{
tree = (treestruct*)malloc(sizeof(treestruct));//说明节点的空间
tree->data = num; //传入结点的值
tree->lchild = createtree();//使用嵌套 再对子树的左孩子传值
tree->rchild = createtree(); // 传值的时候要记住我们每个节点有默认有两个孩子,需要给每个孩子赋值0 才能表示没有子树了
}
return tree;//返回根
}
//每次传值都是先对左孩子下定义 如果一直有左孩子 那就是一直对左孩子初始化
void previsit(treestruct *tree)//前序读出
{
if(tree == NULL)
return ;
printf("%5d",tree->data);//从根开始 先读出根 然后左孩子然后右孩子
previsit(tree->lchild);
previsit(tree->rchild);
}
void midvisit(treestruct *tree)
{
if(tree == NULL)
return ;
midvisit(tree->lchild);
printf("%5d",tree->data);//从最左边的数开始先读出这个数然后双亲节点的数然后右孩子的数
midvisit(tree->rchild);
}
void lastvisit(treestruct *root)
{
if(root == NULL)
return ;
lastvisit(root->lchild);
lastvisit(root->rchild);
printf("%5d",root->data);//最左边的数开始先读出左孩子的数然后右孩子的数然后双亲节点的数
}
int main()
{
treestruct *tree = createtree();
lastvisit(tree);
return 0;
}
下面是我自己用笔手写的读入数据和前序,中序和后序读出过程
读入过程
前序
中序
后序
如果有用麻烦点个赞,手写不容易.