- 先序遍历:按照根节点->左子树->右子树的顺序访问二叉树
- 中序遍历:按照左子树->根节点->右子树的顺序访问
- 后序遍历:按照左子树->右子树->根节点的顺序访问
#include<stdio.h>
#include<malloc.h>
typedef struct btnode //二叉树结点
{
char data;
struct btnode *lchild,*rchild; //指向结构体本身的结构体指针
}bitnode,*bitree; //使用typedef为这个新的结构起了别名,bitree是指针型
//指针函数,返回bitree指针
bitree create(){ //生成二叉树的递归算法
bitree p;
char ch;
scanf("%c",&ch); //一次输入完成,否则需要加getchar()来吸收回车符
if( ch=='#' ) //如果输入的符号不是字符#,则创建一个新结点
p=NULL;
else{
p=(bitnode *)malloc(sizeof(bitnode)); //分配内存大小为bitnode,数据类型是bitnode*
p->data=ch;
p->lchild=create();//创建结点p的左子树
p->rchild=create();//创建结点p的右子树
}
return p;
}
void preorder(bitree q){ //对指针p指向的二叉树进行先根遍历
if(q!=NULL){
printf("%2c",q->data);//访问根结点
preorder(q->lchild);//访问左子树
preorder(q->rchild);//访问右子树
}
}
void inorder(bitree b){ //对指针p指向的二叉树进行中根遍历
if(b!=NULL){
inorder(b->lchild);//访问左子树
printf("%2c",b->data);//访问根结点
inorder(b->rchild);//访问右子树
}
}
void lastorder(bitree d){
if(d!=NULL){
lastorder(d->lchild);//访问左子树
lastorder(d->rchild);//访问右子树
printf("%2c",d->data);//访问根结点
}
}
int main(void){
bitree bt; //struct btnode * bt
printf("Please input tree node string which finsh with '#':\n");
bt=NULL;
bt=create();
printf("\n result: \n");
printf("递归前序遍历输出为preorder:\n");
preorder(bt);
printf("\n");
printf("递归中序遍历输出为inorder:\n");
inorder(bt);
printf("\n");
printf("递归后序遍历输出为lastorder:\n");
lastorder(bt);
printf("\n");
getchar();
return 0;
}