创建顺序树
void createTree(char *data){
int n = 1;
char d;
printf("请输入顺序树,空格代表该位置没有元素,\n 回车结束结束输入\n");
while((d=getchar())!='\n'&&d!=EOF){
if(n>MaxSize){
printf("输入有误,请仔细检查后输入\n");
n = 1;
}
if(d==' ');
else
data[n] = d;
n++;
}
printf("总共有%d个结点\n",n-2);
}
先序
void preorder(char *data,int n){
if(n<MaxSize){
if(data[n]!='\0')
printf("%c",data[n]);
preorder(data,2*n);
preorder(data,2*n+1);
}
}
中序
void inorder(char *data,int n){
if(n<MaxSize){
inorder(data,2*n);
if(data[n]!='\0')
printf("%c",data[n]);
inorder(data,2*n+1);
}
}
后序
void postorder(char *data,int n){
if(n<MaxSize){
postorder(data,2*n);
postorder(data,2*n+1);
if(data[n]!='\0')
printf("%c",data[n]);
}
}
总程序
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 16
char data[MaxSize] = {'\0'};
void createTree(char *data);
void preorder(char *data,int n);
void inorder(char *data,int n);
void postorder(char *data,int n);
int main(){
createTree(data);
printf("先序遍历:");
preorder(data,1);
printf("\n");
printf("中序遍历:");
inorder(data,1);
printf("\n");
printf("后序遍历:");
postorder(data,1);
printf("\n");
return 1;
}
void createTree(char *data){
int n = 1;
char d;
printf("请输入顺序树,空格代表该位置没有元素,\n 回车结束结束输入\n");
while((d=getchar())!='\n'&&d!=EOF){
if(n>MaxSize){
printf("输入有误,请仔细检查后输入\n");
n = 1;
}
if(d==' ');
else
data[n] = d;
n++;
}
printf("总共有%d个结点\n",n-2);
}
void preorder(char *data,int n){
if(n<MaxSize){
if(data[n]!='\0')
printf("%c",data[n]);
preorder(data,2*n);
preorder(data,2*n+1);
}
}
void inorder(char *data,int n){
if(n<MaxSize){
inorder(data,2*n);
if(data[n]!='\0')
printf("%c",data[n]);
inorder(data,2*n+1);
}
}
void postorder(char *data,int n){
if(n<MaxSize){
postorder(data,2*n);
postorder(data,2*n+1);
if(data[n]!='\0')
printf("%c",data[n]);
}
}
运行结果:
