运行不出结果,麻烦帮忙看一下吧
基本要求:1) 用C语言编程描述二叉树存储结构和遍历算法;
2) 编写程序,建立二叉树的存储结构-二叉链表;
3) 编写程序,实现二叉树的前序、中序和后序遍历;
4) 计算二叉树的深度和叶子结点个数。
程序代码:
#include<stdio.h> #include<stdlib.h> //二叉树的存储结构,一个数据域,两个指针域 typedef struct bitnode { char data; struct bitnode *lchild,*rchild; }bitnode,*bitree; //二叉树的先序遍历 void preordertraverse(bitree t) { if(t==NULL) return; printf("%c",t->data); preordertraverse(t->lchild); preordertraverse(t->rchild); } //二叉树的中序遍历 void inordertraverse(bitree t) { if(t==NULL) return; inordertraverse(t->lchild); printf("%c",t->data); inordertraverse(t->rchild); } //二叉树的后序遍历 void postordertraverse(bitree t) { if(t==NULL) return; postordertraverse(t->lchild); postordertraverse(t->rchild); printf("%c",t->data); } void createbitree(bitree *t) { char ch;//输入结点的值(字符型) scanf("%c",&ch); if(ch=='#') *t=NULL; else { *t=(bitree)malloc(sizeof(bitnode)); if(!*t) exit(-1); (*t)->data=ch; createbitree(&(*t)->lchild); createbitree(&(*t)->rchild); } } //二叉树的深度 int depth(bitree t) { int depthleft,depthright,depthval; if(t) { depthleft=depth(t->lchild); depthright=depth(t->rchild); depthval=1+ (depthleft>depthright?depthleft:depthright); } else depthval=0; return depthval; } int main() { bitree t; createbitree(&t); preordertraverse(t); inordertraverse(t); postordertraverse(t); depth(t); return 0; }