数据结构 二叉树
数据结构实验一个简单的二叉树代码原创
安装提示输入基本没bug,非法输入未过滤。
#include <stdio.h> #include<stdlib.h> struct tnode /*定义二叉树存储结构*/ {char data; struct tnode*lchild; struct tnode*rchild; }; typedef struct tnode tree;//由节点定义树 void inittree(tree *t) { t->data='\0'; t->lchild=NULL; t->rchild=NULL; }//初始化树 void createterr(tree *T)//添加数据,递归调用 { char c; if(T->data!='\0') printf("error\n"); tree *p; p=T; int a=0; if(p->lchild==NULL||p->rchild==NULL) { fflush(stdin); printf("请输入数据:\n");//输入根节点数据 scanf("%c",&(p->data)); fflush(stdin); } if(p->lchild==NULL)//节点左孩子为空 { printf("%c的左孩子为空,是否添加数据y/n\n",p->data); scanf("%c",&c); fflush(stdin); if(c=='y') { tree *q=(tree *)malloc(sizeof(tree)); inittree(q); p->lchild=q; createterr(q); } } if(p->rchild==NULL)//节点右孩子为空 { printf("%c的右孩子为空,是否添加数据y/n\n",p->data); scanf("%c",&c); fflush(stdin); if(c=='y') { tree *q=(tree *)malloc(sizeof(tree)); inittree(q); p->rchild=q; createterr(q); } } } void preorder(tree*t) /*先序遍历函数*/ {if(t) {printf("%c ",t->data); /*输出根结点数据*/ preorder(t->lchild); preorder(t->rchild); } } void inorder(tree*t) /*中序遍历函数*/ {if(t) {inorder(t->lchild); printf("%c ",t->data); inorder(t->rchild); } } void postorder(tree*t) /*后序遍历函数*/ {if(t) { postorder(t->lchild); postorder(t->rchild); printf("%c ",t->data); } } int main() { int c=1; tree *T1=(tree *)malloc(sizeof(tree)); for(int a=1;c;a++) { system("cls"); printf("第%d次实验\n\n",a); inittree(T1); createterr(T1); preorder(T1); /*先序遍历*/ printf("\n"); inorder(T1); /*中序遍历*/ printf("\n"); postorder(T1); /*后序遍历*/ printf("是否继续实验\n1-继续 0-退出\n"); scanf("%d",&c); } return 0; }
相信奇迹的人,本身和奇迹一样了不起!