二叉树的各种基本作实验报告.docx

上传人:暗伤 文档编号:4229479 上传时间:2021-06-24 格式:DOCX 页数:9 大小:138.49KB
返回 下载 相关 举报
二叉树的各种基本作实验报告.docx_第1页
第1页 / 共9页
二叉树的各种基本作实验报告.docx_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《二叉树的各种基本作实验报告.docx》由会员分享,可在线阅读,更多相关《二叉树的各种基本作实验报告.docx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验项目二叉树的操作最好的沉淀项目类型综合型完成 时间2009-11-2实 验 目 的及要 求掌握二叉树的存储实现;掌握二叉树的遍历思想; 掌握二叉树的 常见算法的程序实现。【实验过程】(实验步骤、绘图、记录、数据、分析、结果)实验内容:a.输入完全二叉树的先序序列, 用 #代表虚结点 (空指针),如 ABD#CE#F# 建 立二叉树,实现先序、中序和后序以及按层次遍历序列。b. 求所有叶子及结点总数。实验步骤:#include #include #define MAX10#define STACK_INIT_SIZE 40/ 存储空间初始分配量#define STACKINCREMENT 1

2、0 / 存储空间分配增量typedef struct BiTNodechar data;struct BiTNode *lchild; struct BiTNode *rchild;BiTNode,*BiTree;/ 将 BiTree 定义为指向二叉链表结点结构的指针类型BiTNode *bt;typedefstruct BiTree *base; int top;intstacksize;SqStack;typedef structBiTree *base;int front; int rear;SqQueue;void InitStack(SqStack &S)/ 构造一个空栈 SS.ba

3、se=(BiTree*) malloc(STACK_INIT_SIZE*sizeof(BiTree); if (!S.base) exit (0);/存储分配失败S.top=0;/ 空表长度为 0 S.stacksize=STACK_INIT_SIZE;/初始存储容量/InitStackint StackEmpty(SqStack &S)/ 判断栈 S 是否是空栈,是返回1,否则返回 0 if(S.top=0)return 1;elsereturn 0;/StcakEmptyvoid Push(SqStack &S, BiTree e)/ 插入元素 e 为新的栈顶元素 , if (S.top=

4、S.stacksize)/ 栈满追加空间S.base=(BiTree*) realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(BiTree);if(!S.base)exit(0);/存储分配失败S.stacksize+=STACKINCREMENT;S.baseS.top+=e;/Pushvoid Pop(SqStack &S,BiTree &e)/若栈不空则删除S 的栈顶元素,并用e返回其值if (S.top=0)printf( 栈空 );/栈为空exit(0);e=S.base-S.top;/Popint GetTop(SqStack S,

5、 BiTree &e)/若栈不空则用 e 返回 S 的栈顶元素if (S.top=0)elseprintf( 栈空 ); return 0;/栈为空/GetTope=S.baseS.top-1; return 1;void InitQueue(SqQueue &Q)/ 构建新队列 QQ.base=(BiTree*)malloc(MAX * sizeof(BiTree); Q.front=Q.rear=0;int QueueEmpty(SqQueue Q)/ 判断队列是否是一个空队列if(Q.front=Q.rear) return 1;return 0;void EnQueue(SqQueue

6、 &Q,BiTree e)/ 将元素 e 插入到队列 Q 中if(Q.rear+1)%MAX=Q.front) exit(0);Q.baseQ.rear=e;Q.rear=(Q.rear+1)%MAX;void DeQueue(SqQueue &Q,BiTree &e)/ 将非空队列 Q 的队头元素出队列if(Q.front=Q.rear) exit(0);e=Q.baseQ.front; Q.front=(Q.front+1)%MAX;/int n0,n;/n0 统计叶子结点数, n 统计总的结点数void PreCreatBiTree(BiTree &bt)/ 按照先序建立二叉树的二叉链表

7、#表示虚结点char ch; ch=getchar(); if(ch=#)bt=NULL;elsebt=(BiTree)malloc(sizeof(BiTNode); bt-data=ch;PreCreatBiTree(bt-lchild);PreCreatBiTree(bt-rchild);void InOrderTraverse1(BiTree bt)/ 利用递归算法中序遍历一个二叉树if(bt)InOrderTraverse1(bt-lchild); printf(%2c,bt-data); InOrderTraverse1(bt-rchild);void PreOrderTravers

8、e1(BiTree bt)/ 递归算法对二叉树进行先序便利if(bt)printf(%2c,bt-data); PreOrderTraverse1(bt-lchild); PreOrderTraverse1(bt-rchild);void PostOrderTraverse1(BiTree bt)/ 利用递归后序遍历二叉树if(bt)PostOrderTraverse1(bt-lchild); PostOrderTraverse1(bt-rchild); printf(%2c,bt-data);void LeverlOrderTraverse(BiTree bt)/ 层次遍历二叉树 SqQue

9、ue Q; BiTree p; if(bt)InitQueue(Q); EnQueue(Q,bt); while(!QueueEmpty(Q)DeQueue(Q,p); printf(%2c,p-data); if(p-lchild)EnQueue(Q,p-lchild);if(p-rchild)EnQueue(Q,p-rchild);/while/if/LeverlOrderTraversevoid PreOrderTraverse2(BiTree bt)/非递归对 bt 进行先序遍历SqStack S; BiTree p;if(bt)InitStack(S);Push(S, bt);/根指

10、针进栈 while(!StackEmpty(S)while(GetTop(S,p) & p)printf(%2c,p-data); Push(S, p-lchild);/向左一直走到尽头Pop(S,p);/空指针退栈 if(!StackEmpty(S)Pop(S,p);Push(S, p-rchild);/while/if/ PreOrderTraversevoid InOrderTraverse2(BiTree bt)/ 非递归对 bt 进行中序遍历if(bt)SqStack S; BiTree p; InitStack(S);Push(S, bt); /根指针进栈while(!StackE

11、mpty(S)while(GetTop(S,p)&p)/ 栈顶元素非空Push(S, p-lchild);/向左一直走到尽头 Pop(S, p);/空指针退栈if(!StackEmpty(S)Pop(S,p); printf(%2c,p-data); Push(S, p-rchild);/if/if/while/ InOrderTraversevoid PostOrderTraverse2(BiTree bt)/非递归对 bt 进行后序遍历SqStack S; BiTree p,q; InitStack(S);Push(S,bt);/根指针进栈while(!StackEmpty(S)while

12、(GetTop(S,p)&p) / 栈顶元素非空 Push(S,p-lchild);/向左一直走到尽头 Pop(S,p);/空指针退栈/对左子树操作完毕,再判断右子树 if(!StackEmpty(S)/ 栈非空GetTop(S,p);Push(S,p-rchild);/右孩子入栈if(GetTop(S,p)&p=NULL)素出栈并访问他Pop(S,p); /空结点出栈 Pop(S,p); /左右孩子处理完了printf(%2c,p-data);/ 访问根结点while(!StackEmpty(S)&GetTop(S,q)&q-rchild=p)/并且刚刚访问的结点为栈顶元素的右孩子时,让栈顶

13、元Pop(S,p); printf(%2c,p-data);if(! StackEmpty (S)/if/ifGetTop(S,p); Push(S,p-rchild);/PostOrderTraversevoid PutOutLeaf(BiTree bt)/ 返回值为 bt 的叶子数if(bt)if(bt-lchild=NULL&bt-rchild=NULL)printf(%2c,bt-data);elseif(bt-lchild)PutOutLeaf(bt-lchild);if(bt-rchild)PutOutLeaf(bt-rchild);void CountNodes(BiTree b

14、t,int &n)/ 输出总的节点数if(bt)n+;CountNodes( bt-lchild,n); CountNodes( bt-rchild,n);void main()int n=0;printf( 先序建立二叉树 ,#代表虚结点 n); printf( 请输入你所建立二叉树的字符串n); PreCreatBiTree(bt);printf(n);printf( 先序遍历二叉树递归算法n); PreOrderTraverse1(bt);printf(n 先序遍历二叉树非递归算法n);PreOrderTraverse2(bt);printf(n 中序遍历二叉树递归算法n); InOrd

15、erTraverse1(bt);printf(n 中序遍历二叉树非递归算法n);InOrderTraverse2(bt);printf(n 后序遍历二叉树递归算法n); PostOrderTraverse1(bt);printf(n 后序遍历二叉树非递归算法n);PostOrderTraverse2(bt); printf(n 层次遍历二叉树 n); LeverlOrderTraverse(bt); printf(n 叶子结点是 n); PutOutLeaf(bt); CountNodes(bt,n);printf(n 结点总数是 :%d,n);printf(n); 实验运行结果教师批阅评语:成绩评定良中及优秀好等格不及格教师签名 :年月日

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁