创建二叉树和实现二叉树的三种遍历
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; }