简单的创建树并且遍历
创建树
bintree *createtree(){
bintree *t;
datatype data;
t = (bintree*)malloc(sizeof(bintree));
//检查输入是否合法
/*do{
scanf("%c",&data);
getchar(); //接收回车字符
if((data!=' ')&&((data<'a')||(data>'z'))){
printf("输入格式错误,请重新输入\n");
}
}
while((data!=' ')&&(data<'a')&&(data>'z'));
*/
while((data=getchar())!='\n'&&(data!=' ')&&((data<'a')||(data>'z'))){
printf("输入格式错误,请重新输入\n");
}
if(data!=' '){
t->data = data;
t->l = createtree();
t->r = createtree();
}
else{
return NULL;
}
return t;
}
前序序列遍历
void preorder(bintree *t){
if(t!=NULL){
printf("%c",t->data);
preorder(t->l);
preorder(t->r);
}
else{
//printf("此结点没有孩子结点\n");
}
}
中序序列遍历
void inorder(bintree *t){
if(t!=NULL){
inorder(t->l);
printf("%c",t->data);
inorder(t->r);
}
else{
//printf("此结点没有孩子结点\n");
}
}
后序序列遍历
void postorder(bintree *t){
if(t!=NULL){
postorder(t->l);
postorder(t->r);
printf("%c",t->data);
}
else{
//printf("此结点没有孩子结点\n");
}
}
总代码
#include "stdio.h"
#include "stdlib.h"
typedef char datatype;
typedef struct node{
datatype data;
struct node *l,*r;
}bintree;
bintree *createtree();
void inorder(bintree *t);
void preorder(bintree *t);
void postorder(bintree *t);
//主程序
int main(){
bintree *t;
printf("请输入该节点的值,按照左-中-右序列,空格代表空' '\n输入的值必须是小写字母\n");
t = createtree();
printf("先序序列遍历...\n");
preorder(t);
printf("先序序列遍历完成\n");
printf("中序序列遍历...\n");
inorder(t);
printf("中序序列遍历完成\n");
printf("后序序列遍历...\n");
postorder(t);
printf("后序序列遍历完成\n");
}
//创建树
bintree *createtree(){
bintree *t;
datatype data;
t = (bintree*)malloc(sizeof(bintree));
//检查输入是否合法
do{
scanf("%c",&data);
getchar(); //接收回车字符
if((data!=' ')&&(data<'a')&&(data>'z')){
printf("输入格式错误,请重新输入\n");
}
}
while((data!=' ')&&(data<'a')&&(data>'z'));
if(data!=' '){
t->data = data;
t->l = createtree();
t->r = createtree();
}
else{
return NULL;
}
return t;
}
//先序序列 ,中-左-右
void preorder(bintree *t){
if(t!=NULL){
printf("%c",t->data);
preorder(t->l);
preorder(t->r);
}
else{
//printf("此结点没有孩子结点\n");
}
}
//中序序列,左-中-右
void inorder(bintree *t){
if(t!=NULL){
inorder(t->l);
printf("%c",t->data);
inorder(t->r);
}
else{
//printf("此结点没有孩子结点\n");
}
}
//后序序列,左-右-中
void postorder(bintree *t){
if(t!=NULL){
postorder(t->l);
postorder(t->r);
printf("%c",t->data);
}
else{
//printf("此结点没有孩子结点\n");
}
}