创建二叉树和实现二叉树的三种遍历
a.根据提示输入字符型数据创建二叉树,输入值为所有字符型数据
b. 输出为遍历后的每个结点的值的顺序
c. 创建二叉树并能实现二叉树的先序、中序、后序遍历
d. 如果输入数据为:a b c
程序代码:#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct TreeNode{
char data;
struct TreeNode *lchild;
struct TreeNode *rchild;
};
struct TreeNode* add_to_tree(struct TreeNode *b,char data)
{
int FLAG=0;
struct TreeNode *p,*t;
p=(struct TreeNode *)malloc(sizeof(struct TreeNode));
p->data=data;
p->lchild=NULL;
p->rchild=NULL;
if(b==NULL)
b=p;
else{t=b;
while(!FLAG)
if(t->data>data){if(t->lchild==NULL){t->lchild=p;FLAG=1;}else t=t->lchild;}
else{if(t->rchild==NULL){t->rchild=p;FLAG=1;}else t=t->rchild;}
}
return b;
}
struct TreeNode* createTree(struct TreeNode *b)
{
int i,n,data;
printf("输入结点个数:\t");
scanf("%d",&n);
fflush(stdin);
b=NULL;
for(i=0;i<n;i++)
{
printf("添加第%d结点,输入结点数据域:\t",i+1);
scanf("%c",&data);
fflush(stdin);
b=add_to_tree(b,data);
}
return b;
}
void preOrder(struct TreeNode *b)
{if(b){
printf("%c\t",b->data);
preOrder(b->lchild);
preOrder(b->rchild);}
}
void inOrder(struct TreeNode *b)
{if(b){
inOrder(b->lchild);
printf("%c\t",b->data);
inOrder(b->rchild);}
}
void postOrder(struct TreeNode *b)
{if(b){
postOrder(b->lchild);
postOrder(b->rchild);
printf("%c\t",b->data);}
}
main()
{
int t;
struct TreeNode *root;
root=(struct TreeNode *)malloc(sizeof(struct TreeNode));
do{printf("\n----------------------------------------------");
printf("\n| 1.建立顺序二叉树 |");
printf("\n| 2.先序、中序、后序遍历二叉树 |");
printf("\n| 3.程序运行结束 |");
printf("\n----------------------------------------------");
printf("\n 请输入您的选择(1,2,3)\n");
scanf("%d",&t);
switch(t)
{
case 1:root=createTree(root);break;
case 2:printf("\n先序遍历:\n");
preOrder(root);
printf("\n中序遍历:\n");
inOrder(root);
printf("\n后序遍历:\n");
postOrder(root);
printf("\n\n 按Enter继续");
getch();
break;
}
printf("\n---------------------------------------------");
}while(t>=1&&t<=3);
printf("\n 运行结束。。。\a\a\a\a\a");
printf("按Enter键返回");
getch();
return 0;
}
