2022年树和二叉树实验报告 .pdf
《2022年树和二叉树实验报告 .pdf》由会员分享,可在线阅读,更多相关《2022年树和二叉树实验报告 .pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验内容:实 验 三树 和 二 叉 树1. 编 写 函 数 , 输 入 字 符 序 列 , 建 立 二 叉 树 的 二 叉 链 表 。2. 编 写 函 数 , 实 现 二 叉 树 的 中 序 递 归 遍 历 算 法 。 ( 最 好 也 能 实 现 前 缀 和 后 缀 遍 历 算法 ) 3. 编 写 函 数 , 实 现 二 叉 树 的 中 序 非 递 归 遍 历 算 法 。4. 编 写 函 数 , 借 助 队 列 实 现 二 叉 树 的 层 次 遍 历 算 法 。5. 编 写 函 数 , 求 二 叉 树 的 高 度 。6. 编 写 函 数 , 求 二 叉 树 的 结 点 个 数 。7. 编 写
2、函 数 , 求 二 叉 树 的 叶 子 个 数 。8. 编 写 函 数 , 交 换 二 叉 树 每 个 结 点 的 左 子 树 和 右 子 树 。9. 编 写 一 个 主 函 数 , 在 主 函 数 中 设 计 一 个 简 单 的 菜 单 , 分 别 调 试 上 述 算 法 。实验目的及要求:1. 掌 握 二 叉 树 的 存 储 实 现2. 掌 握 二 叉 树 的 遍 历 思 想3. 掌 握 二 叉 树 的 常 见 算 法 的 程 序 实 现实验内容、方法与步骤: (使用附页填写并附在本页后)见 附 页实验结果:见 附 页小结:通 过 本 次 实 验 , 我 基 本 掌 握 了 二 叉 树 的
3、 存 储 实 现 和 二 叉 树 的 遍 历 思 想 ,并 且 实 现 了 二 叉 树 的 几 种 常 见 算 法 。分数:批阅老师:200 年月日第1 页 / 共13 页实 验 报告 (附 页)#include #include #define OK 1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 13 页 - - - - - - - - - #define ERROR 0 #define OVERFLOW -2 typedef int status; typede
4、f struct BiNode/二叉链表 char Data; struct BiNode* lChild; struct BiNode* rChild; BiNode,*pBiNode; typedef struct SNode/*链栈的结点类型*/ pBiNode elem; /*栈中的元素是指向二叉链表结点的指针*/ struct SNode *next; SNode; struct link /队列链表 struct BiNode *p; struct link *next; ; status CreateTree(BiNode* pTree); status PreOrderTrav
5、al(BiNode* pTree);/前序递归status InOrderTraval(BiNode* pTree);/中序递归status PostOrderTraval(BiNode* pTree);/后序递归status st_InOrderTraverse(BiNode* pTree);/中序非递归遍历void TreeLink(BiNode* pTree); /队列实现层次遍历int TreeHeight (BiNode* pTree);/二叉树的高度int Count(BiNode* pTree);/结点个数int TreeNumber(BiNode* pTree);/叶子个数vo
6、id Exchange (BiNode* pTree);/交换左右子树status Visit(char Data); void Display(BiNode* pTree,int Level); BiNode *pRoot=NULL; status CreateTree(BiNode* pTree) /*Input Example: abd#e#cf#g#*/ char ch; scanf(%c,&ch); if(ch=#) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,
7、共 13 页 - - - - - - - - - (*pTree)=NULL; else if(!(*pTree)=(BiNode*)malloc(sizeof(BiNode) exit(OVERFLOW); (*pTree)-Data=ch; CreateTree(&(*pTree)-lChild); CreateTree(&(*pTree)-rChild); return OK; status PreOrderTraval(BiNode* pTree)/前序递归 if(pTree) if(Visit(pTree-Data) if(PreOrderTraval(pTree-lChild) i
8、f(PreOrderTraval(pTree-rChild) return OK; return ERROR; else return OK; status InOrderTraval(BiNode* pTree)/中序递归 if(pTree) if(InOrderTraval(pTree-lChild) if(Visit(pTree-Data) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 13 页 - - - - - - - - - if(InOrderTraval
9、(pTree-rChild) return OK; return ERROR; return ERROR; else return OK; status PostOrderTraval(BiNode* pTree)/后序递归 if(pTree) if(PostOrderTraval(pTree-lChild) if(PostOrderTraval(pTree-rChild) if(Visit(pTree-Data) return OK; return ERROR; return ERROR; else return OK; status st_InOrderTraverse(BiNode* p
10、Tree)/中序非递归遍历 BiNode *p; SNode *q,*Stop=NULL; /*用不带头结点的单链表作为栈的存储结构*/ p=pTree; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 13 页 - - - - - - - - - while(p!=NULL|Stop!=NULL) /*不是空树 */ if(p!=NULL) q=(SNode*)malloc(sizeof(SNode); if(q=NULL)return ERROR; q-next=St
11、op; q-elem=p; Stop=q; /*根结点指针入栈 */ p=p-lChild; /*进入根的左子树*/ else q=Stop;Stop=Stop-next; /*栈顶元素出栈 */ printf(%c ,q-elem-Data);/*访问根结点 */ p=q-elem-rChild; /*进入根的右子树 */ free(q); /*释放原栈顶元素的结点空间*/ return OK; void TreeLink(BiNode* pTree) /队列实现层次遍历 struct link *head,*rear,*temp; head=(struct link *)malloc(si
12、zeof(struct link); head-p=pTree; head-next=NULL; rear=head; do if(head-p-lChild!=NULL) temp=(struct link *)malloc(sizeof(struct link); temp-p=head-p-lChild; temp-next=NULL; rear-next=temp; rear=temp; if(head-p-rChild!=NULL) temp=(struct link *)malloc(sizeof(struct link); temp-p=head-p-rChild; temp-n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年树和二叉树实验报告 2022 二叉 实验 报告
限制150内