《数据结构全部实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构全部实验报告.docx(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据结构实验报告一实验内容:实验内容:线性表链式存储结构下基本操作的实现学号:学号:姓名:姓名:一、上机实验的问题和要求(需求分析一、上机实验的问题和要求(需求分析):题目题目 线性表链式存储结构下基本操作的实现(初始化、赋值、取值、插入、删除、等)。二、程序设计的基本思想,原理和算法描述:二、程序设计的基本思想,原理和算法描述:首先基于线性链表的存储结构建一个单链表(下面的程序实现的是通过头插法逆序建表),在此基础上实现对单链表的赋值、取值、插入、删除以及两个表的归并,需要注意的是插入(删除)过程中指针的修改。三、调试和运行程序过程中产生的问题及采取的措施:三、调试和运行程序过程中产生的问题
2、及采取的措施:1、注意 scanf 的格式;2、在编写程序过程中注意链表指针的正确修改;四、源程序及注释四、源程序及注释 源程序 程序名:1.cpp1.cpp#include#include#include#definetrue1#definefalse0#defineok1#defineerror0#defineoverflow-2#define initsize100#define increment10#definenull0typedef int status;typedef int elemtype;typedef struct lnodeelemtypedata;struct ln
3、ode*next;lnode,*linklist;void listtraverse(linklist l)/遍历链式表 llinklist p=l-next;while(p!=null)printf(%dn,p-data);p=p-next;void creatlist(linklist&l,int n)/逆位序输入个元素的值,建立带表头节点的单链表 lint i;linklist p;l=(linklist)malloc(sizeof(lnode);l-next=null;for(i=n;i0;-i)p=(linklist)malloc(sizeof(lnode);p-data=i;p-n
4、ext=l-next;l-next=p;/creatliststatus getelem(linklist l,int i,elemtype&e)/取带头节点的单链表 l 中第 i 个元素,用 e 返回int j;linklist p;p=l-next;j=1;while(p&jnext;+j;if(!p|ji)return error;e=p-data;return ok;/getelemstatus listinsert(linklist&l,int i,elemtype e)/在带头节点的单链表 l 中第 i 个位置前插入元素 elinklist p,s;int j=0;p=l-next
5、;while(p&jnext;+j;if(!p|ji-1)return error;s=(linklist)malloc(sizeof(lnode);s-data=e;s-next=p-next;p-next=s;return ok;/listinsertvoid main()linklist l;int i,e,j,f;int n;printf(请输入节点个数:);scanf(%d,&n);creatlist(l,n);printf(建表成功!);listtraverse(l);printf(please input the location i:);scanf(%d,&i);getelem
6、(l,i,e);printf(the i th elem is%dn,e);printf(please input the inserted elems num and the value:);scanf(%d%d,&j,&f);listinsert(l,j,f);listtraverse(l);五、运行结果五、运行结果数据结构实验报告一实验内容:实验内容:约瑟夫环问题学号:学号:姓名:姓名:一、上机实验的问题和要求(需求分析一、上机实验的问题和要求(需求分析):题目题目 设有 n 个人围坐一圈,现从某个人开始报数,数到 m 的人出列,接着从出列的下一个人开始重新报数,数到 m 的人又出列,如
7、此下去,直到所有人都出列为止。试设计一个程序求出出列顺序。要求利用单向循环链表存储结构模拟此过程,按照出列的顺序打印出各人的编号。二、程序设计的基本思想,原理和算法描述:二、程序设计的基本思想,原理和算法描述:本程序是在线性链表的基础上实现对循环链表的操作,重点考察循环链表的删除操作;三、调试和运行程序过程中产生的问题及采取的措施:三、调试和运行程序过程中产生的问题及采取的措施:1、注意删除元素时指针的变化;2、注意要删除元素位置的确定;四、源程序及注释四、源程序及注释 源程序 程序名:2.cpp2.cpp#include#include#include#defineok 1#defineer
8、ror-1#definetruth0typedefintstatus;typedefstructLnodeintdata;structLnode*next;Lnode,*Linklist;voidcreatlist_L(Linklist&L,int n)inti;Lnode*p;L=(Linklist)malloc(sizeof(Lnode);L-next=L;L-data=1;for(i=n;i1;-i)p=(Linklist)malloc(sizeof(Lnode);p-data=i;p-next=L-next;L-next=p;statusprintf_L(LinklistL)Linkl
9、istp=L;inti;int n=8;for(i=1;idata);p=p-next;printf(n);returnok;voidmain()int i,k,n;Lnode*s;Lnode*L;printf(the whole numberis:);scanf(%d,&n);creatlist_L(L,n);printf(thenumberlistis:);printf_L(L);printf(请输入要删除元素的位置:);scanf(%d,&k);s=L;while(s-next!=s)for(i=1;inext;printf(%dn,s-next-data);s-next=s-next-
10、next;s=s-next;printf(%d,s-data);五、运行结果五、运行结果数据结构实验报告二.实验内容:实验内容:栈的基本操作学号:学号:姓名:姓名:一、上机实验的问题和要求(需求分析一、上机实验的问题和要求(需求分析):题目题目 栈的基本操作的实现(初始化、赋值、取值、插入、删除等),要求分别采用顺序和链式存储结构。二、程序设计的基本思想,原理和算法描述:二、程序设计的基本思想,原理和算法描述:在栈的顺序存储结构的基础上实现栈的初始化(即建栈),自此基础上实现其相关操作,包括赋值、取栈顶元素、进栈、出栈等,重点考察栈的“先进后出”的特性三、调试和运行程序过程中产生的问题及采取的
11、措施:三、调试和运行程序过程中产生的问题及采取的措施:(略)四、源程序及注释四、源程序及注释 源程序 程序名:3.cpp3.cpp#include#include#include#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW-1#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int Status;typedef int SElemType;typedef struct/栈的顺序存储结构SElemType*base;SElemT
12、ype*top;int stacksize;SqStack;Status InitStack(SqStack&S)/栈的初始化S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);/由系统分配空间if(!S.base)exit(OVERFLOW);/分配失败S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;Status GetTop(SqStack S,SElemType&e)/返回栈顶元素if(S.base=S.top)return ERROR;e=*(S.top-1);re
13、turn OK;Status Push(SqStack&S,SElemType&e)/插入新的值为栈顶元素if(S.top-S.base=S.stacksize)S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType);if(!S.base)exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize=S.stacksize+STACKINCREMENT;*S.top+=e;/*S.top=e;+S.top;return OK;Status Pop(
14、SqStack&S,SElemType e)/删除栈顶元素if(S.top=S.base)return ERROR;e=*-S.top;/-S.top;e=*S.top;return OK;Status StackEmpty(SqStack S)/判断栈是否为空if(S.top=S.base)return TRUE;else return FALSE;Status Traverse(SqStack S)/遍历栈SElemType*p;if(S.top=S.base)return ERROR;for(p=S.base;pS.top;p+)printf(%d,*p);printf(n);int S
15、tackLength(SqStack S)/求栈的长度SElemType*p;int i=0;p=S.top;while(p!=S.base)p-;i+;return(i);int main()SqStack S;SElemType e;int i,n,N;InitStack(S);i=InitStack(S);/判断是否初始化成功if(i)printf(初始化成功!n);printf(输入栈元素个数:);scanf(%d,&n);printf(输入栈元素的值:);for(i=1;i=n;i+)scanf(%d,&e);Push(S,e);Traverse(S);printf(返回栈顶元素:%
16、d,e);GetTop(S,e);printf(n);printf(输入插入元素的值:);scanf(%d,&e);Push(S,e);Traverse(S);printf(删除栈顶元素之后的序列是:n);Pop(S,e);Traverse(S);printf(栈为空?n);if(StackEmpty)printf(No!n);printf(此时栈的长度为:);N=StackLength(S);printf(%dn,N);return 0;五.调试结果数据结构实验报告二实验内容:实验内容:括号匹配学号:学号:姓名:姓名:一、上机实验的问题和要求(需求分析一、上机实验的问题和要求(需求分析):题
17、目题目 假设表达式中允许有两种括号:圆括号和方括号,其嵌套的顺序随意,即()或()等为正确格式,()或(均为不正确的格式。读入含圆括号和方括号的符号序列,输出“匹配”或“此串括号匹配不合法”。二、程序设计的基本思想,原理和算法描述:二、程序设计的基本思想,原理和算法描述:本程序是在实现栈的基本操作的基础上实现其基本应用,即括号匹配问题,重点利用其“先进后出”的特性三、调试和运行程序过程中产生的问题及采取的措施:三、调试和运行程序过程中产生的问题及采取的措施:(略)四、源程序及注释四、源程序及注释 源程序 程序名:4.cpp4.cpp#include#include#include#define
18、stack_int_size8#definestackincrement10#defineoverflow-2#defineerror 0#defineok1typedef int status;typedef char selemtype;typedef struct selemtype*base;selemtype*top;int stacksize;sqstack;status initstack(sqstack&s)/构造一个空栈 ss.base=(selemtype*)malloc(stack_int_size*sizeof(selemtype);if(!s.base)exit(ov
19、erflow);s.top=s.base;s.stacksize=stack_int_size;return ok;/initstackstatus emptystack(sqstack s)if(s.top=s.base)return ok;else return error;status push(sqstack&s,selemtype e)/插入元素 e 为新的栈顶元素int stacksize;if(s.top-s.base=s.stacksize)s.base=(selemtype*)realloc(s.base,(s.stacksize+stackincrement)*sizeof
20、(selemtype);if(!s.base)exit(overflow);s.top=s.base+s.stacksize;s.stacksize+=stackincrement;*s.top+=e;return ok;/pushstatus pop(sqstack&s,selemtype&e)/若栈不为空,则删除 s 的栈顶元素,用 e 返回其值if(s.top=s.base)return error;e=*-s.top;return ok;/popint kuohao(char m)/若括号匹配则返回 1,否则返回 0;sqstack s;int i=0;char x;initstack
21、(s);while(mi!=#)if(mi=(|mi=)push(s,mi);if(mi=)|mi=)if(emptystack(s)return 0;elsepop(s,x);if(x=(&mi=)|(x=&mi=)return 0;i+;if(emptystack(s)return 1;else return 0;void main()char e7=(,(,(,),#;int p;p=kuohao(e);printf(说明:若括号匹配的话,输出结果为 1,反之则为 0.n);printf(判断结果为:%dn,p);五、运行结果五、运行结果数据结构实验报告三实验内容:实验内容:表达式求值学
22、号:学号:姓名:姓名:一、上机实验的问题和要求(需求分析一、上机实验的问题和要求(需求分析):题目题目 表达式求值是实现程序设计语言的基本问题之一,也是栈的应用的一个典型的例子,设计一个程序,演示用算符优先法对算术表达式求值的过程。以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用教科书表 3.1 给出的算符优先关系,实现对算术四则混合运算表达式的求值。【测试数据】3*(7-1);1+2+3+4;88-1*5;1024/4*8;(20+2)*(6/2);(6+2*(3+6)。二、程序设计的基本思想,原理和算法描述:二、程序设计的基本思想,原理和算法描述:在实现括号匹配的基础上,实
23、现算术表达式的求值问题是又一个栈的重要应用三、调试和运行程序过程中产生的问题及采取的措施:三、调试和运行程序过程中产生的问题及采取的措施:(略)四、源程序及注释四、源程序及注释 源程序 程序名:5.cpp5.cpp#include#include#include#define STACK_INIT_SIZE 100#define status int#define SElemType float#define ERROR 0#define OK 1typedef struct/定义栈存储结构SElemType*base;SElemType*top;int stacksize;SqStack;v
24、oid InitStack(SqStack&S)/初始化顺序栈 S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base)exit(-1);S.top=S.base;S.stacksize=STACK_INIT_SIZE;status GetTop(SqStack S,SElemType&e)/取栈顶元素的值if(S.base=S.top)return ERROR;elsee=*(S.top-1);return OK;status Push(SqStack&S,SElemType e)/入栈if(S.top-S
25、.base=S.stacksize)S.base=(SElemType*)realloc(S.base,(S.stacksize+10)*sizeof(SElemType);/分配空间if(!S.base)return ERROR;/分配失败S.top=S.base+S.stacksize;else*S.top+=e;return OK;status Pop(SqStack&S,SElemType&e)/出栈if(S.base=S.top)return ERROR;elsee=*(-S.top);return OK;status Empty(SqStack S)/判断栈是否为空的操作 if(S
26、.base=S.top)return true;else return false;/此前全部为顺序栈的基本操作char Precede(char c1,char c2)/判定运算符的优先级char r;switch(c2)case+:case-:if(c1=(|c1=#)r=;break;case*:case/:if(c1=*|c1=/|c1=)r=;elser=;break;case(:if(c1=)printf(括号匹配错误!n);exit(-1);elser=;break;case#:switch(c1)case#:r=;break;case(:printf(error!没有右括号!n
27、);exit(-1);default:r=;break;/switchbreak;/switchreturn r;/Precedebool In(char d)/判断 c 是否为七种运算符之一switch(d)case+:case-:case*:case/:case(:case):case#:return true;break;default:return false;break;/switchSElemType Operate(SElemType a,SElemType theta,SElemType b)/Operate 为进行二元运算的 a theta b 的函数char n=char(
28、theta);/此处把 double 型强制转换成 int 型,/虽然会造成精度缺失,但本身 theta 是一个符号,也算是整型switch(n)/转换后相当于和符号匹配 ACSII 码case+:return a+b;case-:return a-b;case*:return a*b;default:if(b!=0)return a/b;elseprintf(error!除数不能为零n);exit(-1);/switchSElemType EvaluateExpression()/算符表达式的优先算法。设 OPTR 和 OPND 分别为运算符栈和运算数栈SqStack OPTR,OPND;c
29、harc;char Data11;/定义此数组为了存放整数或小数SElemType a,b,d,e;InitStack(OPTR);/构造一个运算符栈InitStack(OPND);/构造一个运算数栈Push(OPTR,#);/将#压入栈底c=getchar();GetTop(OPTR,e);while(c!=#|e!=#)/栈顶不是#号且输入不是#号if(In(c)/是符号则进栈switch(Precede(e,c)case:/退栈并将运算结果入栈Pop(OPTR,e);Pop(OPND,b);Pop(OPND,a);Push(OPND,Operate(a,e,b);break;/switc
30、helse if(c=0&c=0&c=9|c=.)Datai=c;i+;c=getchar();Datai=0;/数字没有存满,输入字符串结束符d=atof(Data);/此处是把数组里的数字,实际上是按字符串;/转换为 double 类型,然后把浮点型数字入栈Push(OPND,d);/atof 函数的形参是指针类型,故用数组名elseprintf(输入有误!n);exit(-1);GetTop(OPTR,e);/whileGetTop(OPND,e);return e;int main()SElemTyperesult;printf(输入表达式,并以#号结束n);result=Evalua
31、teExpression();printf(结果为:%10.2f:n,result);return 0;数据结构实验报告四实验内容:实验内容:二叉树的建立与遍历(包含递归算法、非递归算法)学号学号姓名:姓名:一、上机实验的问题和要求(需求分析一、上机实验的问题和要求(需求分析):题目题目 建立一棵二叉树,并采用递归以及非递归的算法对其进行遍历(先序、中序、后序),打印输出遍历结果二、程序设计的基本思想,原理和算法描述:二、程序设计的基本思想,原理和算法描述:从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归算法对其进行遍历(先序、中序、后序),在此基础上采用
32、非递归的算法进行遍历,将遍历结果打印输出。三、调试和运行程序过程中产生的问题及采取的措施:三、调试和运行程序过程中产生的问题及采取的措施:(略)四、源程序及注释四、源程序及注释 源程序 程序名:6.cpp6.cpp#include#include#define ERROR 0#define TRUE 1#define OK 1#define NULL 0#define OVERFLOW-1#define STACK_INIT_SIZE 100#defineStackIncrement 10#define Selemtype BiTreetypedef int Status;typedef st
33、ruct BiTNode/二叉树的二叉链表存储结构chardata;struct BiTNode*lchild,*rchild;BiTNode,*BiTree;typedef struct/栈的顺序存储结构Selemtype*base;Selemtype*top;int stacksize;Sqstack;Status InitStack(Sqstack&S)/栈的初始化S.base=(Selemtype*)malloc(STACK_INIT_SIZE*sizeof(Selemtype);if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=ST
34、ACK_INIT_SIZE;return OK;/InitStackStatus Push(Sqstack&S,Selemtype e)/入栈if(S.top-S.base=S.stacksize)S.base=(Selemtype*)realloc(S.base,(S.stacksize+StackIncrement)*sizeof(Selemtype);if(!S.base)exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=StackIncrement;*S.top+=e;return OK;/PushStatus StackEmpt
35、y(Sqstack S)/栈的判空if(S.top=S.base)return TRUE;else return ERROR;/StackEmptySelemtype GetTop(Sqstack&S,Selemtype&e)/取栈顶元素if(S.top=S.base)return ERROR;e=*(S.top-1);return e;/GetTopStatus Pop(Sqstack&S,Selemtype&e)/出栈if(S.top=S.base)return ERROR;e=*-S.top;return OK;/PopStatus PrintElement(char e)/输出函数pr
36、intf(%c,e);return OK;/PrintElementBiTree CreateBiTree(BiTree&T)/按先序序列建立一个二叉树(递归)char a;scanf(%c,&a);if(a=#)T=NULL;elseT=(BiTree)malloc(sizeof(BiTNode);if(!T)return 0;T-data=a;CreateBiTree(T-lchild);CreateBiTree(T-rchild);return T;/CreateBiTreeStatus PreOrderTraverse1(BiTree T,Status(*Visit)(char e)/
37、先序遍历二叉树的递归运算if(T)if(Visit(T-data)if(PreOrderTraverse1(T-lchild,Visit)if(PreOrderTraverse1(T-rchild,Visit)return OK;return ERROR;else return OK;/PreOrderTraverseStatus InOrderTraverse1(BiTree T,Status(*Visit)(char e)/中序遍历二叉树的递归运算if(T)if(InOrderTraverse1(T-lchild,Visit)if(Visit(T-data)if(InOrderTraver
38、se1(T-rchild,Visit)return OK;return ERROR;else return OK;/InOrderTraverseStatus PostOrderTraverse1(BiTree T,Status(*Visit)(char e)/后序遍历二叉树的递归运算if(T)if(PostOrderTraverse1(T-lchild,Visit)if(PostOrderTraverse1(T-rchild,Visit)if(Visit(T-data)return OK;return ERROR;else return OK;/PostOrderTraverseStatus
39、 PreOrderTraverse2(BiTree T,Status(*Visit)(char e)/先序遍历二叉树的非递归运算Sqstack S;BiTree p;InitStack(S);Push(S,T);while(!StackEmpty(S)while(GetTop(S,p)&p)if(!Visit(p-data)return ERROR;Push(S,p-lchild);Pop(S,p);if(!StackEmpty(S)Pop(S,p);Push(S,p-rchild);/if/whilereturn OK;/InOrderTraverseStatus InOrderTraver
40、se2(BiTree T,Status(*Visit)(char e)/中序遍历二叉树的非递归运算Selemtype p;Sqstack S;InitStack(S);p=T;while(p|!StackEmpty(S)if(p)Push(S,p);p=p-lchild;elsePop(S,p);if(!Visit(p-data)return ERROR;p=p-rchild;/else/while/InOrderTraversevoid main()BiTree T=NULL,M;Sqstack S;int n;T=CreateBiTree(T);printf(The Createment
41、is a success!);printf(递归的先序遍历的结果为:);PreOrderTraverse1(T,PrintElement);printf(n);printf(递归的中序遍历的结果为:);InOrderTraverse1(T,PrintElement);printf(n);printf(递归的后续遍历的结果为:);PostOrderTraverse1(T,PrintElement);printf(n);printf(非递归的先序遍历的结果为:);PreOrderTraverse2(T,PrintElement);printf(n);printf(非递归的中序遍历的结果为:);In
42、OrderTraverse2(T,PrintElement);printf(n);五、运行结果五、运行结果数据结构实验报告四实验内容:实验内容:赫夫曼树学号:学号:姓名:姓名:一、上机实验的问题和要求(需求分析一、上机实验的问题和要求(需求分析):题目题目 (1 1)哈夫曼树问题。(2)利用哈夫曼编码进行通讯可以大大提高信道利用率,缩短信息传输时间,降低传输成本,但是,这要求在发送端通过一个编码系统对待传数据进行预先编码;在接受端将传来的数据进行解码(复原)对于双工信道(即可以双向传输的信道),每端都要有一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼的编译码系统。二、程序设计的基本思
43、想,原理和算法描述:二、程序设计的基本思想,原理和算法描述:(略)三、调试和运行程序过程中产生的问题及采取的措施:三、调试和运行程序过程中产生的问题及采取的措施:(略)四、源程序及注释四、源程序及注释 源程序 程序名:7.cppcpp#includestdio.h#includestdlib.h#includestring.h#define status int#defineOK1#defineNULL0#defineMaxvalue 100#defineMaxleaf30typedef structint weight;int parent,lchild,rchild;HTNode,*Huf
44、fmanTree;typedef char*HuffmanCode;status Select(HuffmanTree HT,int n,int&s1,int&s2)HuffmanTree p;int i;int lnode=Maxvalue,mnode=Maxvalue;for(p=HT,i=1;i=n;i+)if(pi.weightlnode&pi.parent=0)mnode=lnode;lnode=pi.weight;s2=s1;s1=i;else if(pi.weightmnode&pi.parent=0)mnode=pi.weight;s2=i;return OK;void Huf
45、fmanCoding(HuffmanTree&HT,HuffmanCode&HC,int*w,int n)int i,m,start,f,s1=0,s2=0,c;char*cd;HuffmanTree p;if(n=1)return;m=2*n-1;HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode);for(p=HT+1,i=1;i=n;+i,+p,+w)(*p).weight=*w;(*p).parent=0;(*p).lchild=0;(*p).rchild=0;for(i=1;i=n;i+)printf(%d,%d,%d,%d,HTi.weight,HT
46、i.parent,HTi.lchild,HTi.rchild);printf(n);for(;i=m;i+)(*p).weight=0;(*p).parent=0;(*p).lchild=0;(*p).rchild=0;p+;for(i=n+1;i=m;i+)printf(%d,%d,%d,%d,HTi.weight,HTi.parent,HTi.lchild,HTi.rchild);printf(n);for(i=n+1;i=m;+i)Select(HT,i-1,s1,s2);HTs1.parent=i;HTs2.parent=i;HTi.lchild=s1;HTi.rchild=s2;HT
47、i.weight=HTs1.weight+HTs2.weight;for(p=HT+1,i=1;i=m;i+,p+)printf(%d,%d,%d,%d,(*p).weight,(*p).parent,(*p).lchild,(*p).rchild);printf(n);/从叶子到根逆向求每个字符的赫夫曼编码HC=(HuffmanCode)malloc(n+1)*sizeof(char*);cd=(char*)malloc(n*sizeof(char);cdn-1=0;for(i=1;idata=a;CreateBiTree(T-lchild);CreateBiTree(T-rchild);r
48、eturn T;/CreateBiTreeStatus PreOrderTraverse(BiTree T,Status(*Visit)(char e)/先序遍历二叉树的递归运算(1)if(T)if(Visit(T-data)if(PreOrderTraverse(T-lchild,Visit)if(PreOrderTraverse(T-rchild,Visit)return OK;return ERROR;else return OK;/PreOrderTraverseStatus PostOrderTraverse(BiTree T,Status(*Visit)(char e)/后序遍历二
49、叉树的递归运算if(T)if(PostOrderTraverse(T-lchild,Visit)if(PostOrderTraverse(T-rchild,Visit)if(Visit(T-data)return OK;return ERROR;else return OK;/PostOrderTraverseint LeafCount(BiTree T)/二叉树中叶子节点的数目if(!T)return 0;else if(!T-lchild&!T-rchild)return 1;else return(LeafCount(T-lchild)+LeafCount(T-rchild);/Leaf
50、CountStatus BtDepth(BiTree T)int leftdep,rightdep;if(T=NULL)return ERROR;else leftdep=BtDepth(T-lchild);rightdep=BtDepth(T-rchild);if(leftdeprightdep)return(leftdep+1);else return(rightdep+1);/BtDepthint height(BiTree T)/求数的深度int m,n;if(T=NULL)return ERROR;elsem=height(T-lchild);n=height(T-rchild);r