满意答案
gurks
2014.07.08
采纳率:48% 等级:9
已帮助:2262人
#include "stdio.h"#include "conio.h"#include "stdlib.h"#define NULL 0int leftdep,rightdep;typedef struct bitnode{char data;struct bitnode *lchild,*rchild;}bintnode,*bintree;bintree createbitree(){bintree t;char x;scanf("%c",&x);if(x==' ') t=NULL;else{t=(bintnode *)malloc(sizeof(bintnode)); t->data=x; t->lchild=createbitree(); t->rchild=createbitree();}return(t);}void preorder(bintree t)/*前序遍历*/{if(t){printf("%2c",t->data);preorder(t->lchild);preorder(t->rchild);}}void midorder(bintree t)/*中序遍历*/{if(t){midorder(t->lchild); printf("%2c",t->data); midorder(t->rchild);}}void printree(bintree t){if(t!=NULL){printf("%c",t->data); if(t->lchild!=NULL||t->rchild!=NULL) {printf("(");printree(t->lchild); if(t->rchild!=NULL) printf(","); printree(t->rchild); printf(")");}}}int treedepth(bintree t) {if(t==NULL) return 0; else{leftdep=treedepth(t->lchild); rightdep=treedepth(t->rchild); if(leftdep>rightdep)return (leftdep+1);elsereturn(rightdep+1);}}int treeleaf(bintree t){if(t==NULL)return0;else if(t->lchild==NULL&&t->rchild==NULL) return1;else return(treeleaf(t->lchild)+treeleaf(t->rchild));}void lastorder(bintree t)/*后序遍历*/{if(t){lastorder(t->lchild);lastorder(t->rchild);printf("%2c",t->data);}}void translevel(bintree t){struct bitnode{bintree vec[30]; int f,r;}q;q.f=0;q.r=0;if(t!=NULL) printf("%2c",t->data); q.vec[q.r]=t;q.r=q.r+1; while (q.flchild!=NULL) {printf("%2c",t->lchild->data); q.vec[q.r]=t->lchild; q.r=q.r+1;}if(t->rchild!=NULL) {printf("%2c",t->rchild->data); q.vec[q.r]=t->rchild; q.r=q.r+1;}} printf("\n");}main(){bintree a;int j,k;clrscr();textcolor(2);printf("**************************欢迎您使用本二叉树操作系统**************************\n");printf("建造一棵二叉树请您输入各个结点的元素值,()表示一个空格键:\n");printf("输入示例:abc()()de()g()()f()()()回车:\n");a=createbitree();printf("您输入的二叉数嵌套法表示如下:\n");printree(a);printf("\n");printf("树的深度为:\n");j=treedepth(a);printf("%d\n",j);printf("二叉数的叶子接点个数为:\n");k=treeleaf(a);printf("%d\n",k);printf("您所输入的二叉树的前序遍历顺序输出如下:\n");if(!a) printf("二叉树为空\n");else{preorder(a);printf("\n");}printf("您所输入的二叉树的中序遍历顺序如下输出:\n");if(!a) printf("二叉树为空\n");else{midorder(a);printf("\n");}printf("您所输入的二叉树的后序遍历顺序输出如下:\n");if(!a) printf("二叉树为空\n");else{lastorder(a);printf("\n");}printf("您所输入的二叉树的层次顺序遍历输出如下:\n"); if(!a) printf("二叉树为空\n");else{ translevel(a);}}
00分享举报