资源描述:
《c语言实现二叉树的代码.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1,2两问的程序代码如下:#include "stdio.h" #include"malloc.h" typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTree Create(BiTree T) { char ch; ch=getchar(); if(ch=='#') T=NULL; else { T=(BiTNode *)malloc(sizeof(BiTNode)); T->data=ch; T->lchild=Create(T
2、->lchild); T->rchild=Create(T->rchild); } return T; } int node(BiTree T) { int sum1=0,a,b; if(T) { if(T!=NULL)sum1++; a=node(T->lchild); sum1+=a; b=node(T->rchild); sum1+=b; } return sum1; } int mnode(BiTree T) { int sum2=0,e,f; if(T) { if((T->l
3、child!=NULL)&&(T->rchild!=NULL)) sum2++; e=mnode(T->lchild); sum2+=e; f=mnode(T->rchild); sum2+=f; } return sum2; } void Preorder(BiTree T) { if(T) { printf("%c",T->data); Preorder(T->lchild); Preorder(T->rchild); } } int Sumleaf(BiTree T) { int sum=0,m,n; if(
4、T) { if((!T->lchild)&&(!T->rchild)) sum++; m=Sumleaf(T->lchild); sum+=m; n=Sumleaf(T->rchild); sum+=n; } return sum;} void zhongxu(BiTree T) { if(T) { zhongxu(T->lchild); printf("%c",T->data); zhongxu(T->rchild); } } void houxu(BiTree T) { if(T) { houxu(T->lchild); houxu(T
5、->rchild); printf("%c",T->data); } } main() { BiTree T; int sum,sum1,sum3; printf("请输入字符串:"); T=Create(T); printf("前序遍历:"); Preorder(T); printf(""); printf("中序遍历:"); zhongxu(T); printf(""); printf("后序遍历:"); houxu(T); printf(""); sum=Sumleaf(T); printf("树叶数为:"); p
6、rintf("%d",sum); printf(""); printf("树结点数为:"); sum1=node(T); printf(""); printf("%d",sum1); printf(""); printf("树满结点数为:");sum3=mnode(T); printf("%d",sum3); printf(""); }3,4两问的程序代码如下:#includeJK#include#defineNULL0#defineMAX100/*定义二叉树*/typedefstructbitnode{chard
7、ata;structbitnode*lchild,*rchild;}bitnode;/*定义栈元素的类型*/typedefstructnode{structbitnode*p;}node;/*定义栈*/typedefstructstack{node*base;node*top;intsize;}stack;/*全局变量*/structbitnode*T;stack*s;inti=0,a;/*a为二叉树的结点总数;i为访问结点时的计数*//*构建空栈*/stack*initstack(){s-