数据结构二叉树遍历实验报告.doc
《数据结构二叉树遍历实验报告.doc》由会员分享,可在线阅读,更多相关《数据结构二叉树遍历实验报告.doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-!问题一: 二叉树遍历1. 问题描述设输入该二叉树的前序序列为: ABC#DE#G#F#HI#J#K#(#代表空子树)请编程完成下列任务:1 请根据此输入来建立该二叉树,并输出该二叉树的前序、中序和后序序列;2 按层次遍历的方法来输出该二叉树按层次遍历的序列;3 求该二叉树的高度。2. 设计描述(1)二叉树是一种树形结构,遍历就是要让树中的所有节点被且仅被访问一次,即按一定规律排列成一个线性队列。二叉(子)树是一种递归定义的结构,包含三个部分:根结点(N)、左子树(L)、右子树(R)。根据这三个部分的访问次序对二叉树的遍历进行分类,总共有6种遍历方案:NLR、LNR、LRN、NRL、RNL和
2、LNR。研究二叉树的遍历就是研究这6种具体的遍历方案,显然根据简单的对称性,左子树和右子树的遍历可互换,即NLR与NRL、LNR与RNL、LRN与RLN,分别相类似,因而只需研究NLR、LNR和LRN三种即可,分别称为“先序遍历”、“中序遍历”和“后序遍历”。采用递归方式就可以容易的实现二叉树的遍历,算法简单且直观。(2)此外,二叉树的层次遍历即按照二叉树的层次结构进行遍历,按照从上到下,同一层从左到右的次序访问各节点。遍历算法可以利用队列来实现,开始时将整个树的根节点入队,然后每从队列中删除一个节点并输出该节点的值时,都将它的非空的左右子树入队,当队列结束时算法结束。(3)计算二叉树高度也是
3、利用递归来实现:若一颗二叉树为空,则它的深度为0,否则深度等于左右子树的最大深度加一。3源程序12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394#include #include #include #define ElemType charstruct BTreeNode ElemType
4、data;struct BTreeNode* left;struct BTreeNode* right;void CreateBTree(struct BTreeNode* T)char ch;scanf_s(n%c, &ch);if (ch = #) *T = NULL;else (*T) = malloc(sizeof(struct BTreeNode);(*T)-data = ch;CreateBTree(&(*T)-left);CreateBTree(&(*T)-right); void Preorder(struct BTreeNode* T)if (T != NULL) print
5、f(%c , T-data);Preorder(T-left);Preorder(T-right);void Inorder(struct BTreeNode* T)if (T != NULL) Inorder(T-left);printf(%c , T-data);Inorder(T-right);void Postorder(struct BTreeNode* T)if (T != NULL) Postorder(T-left);Postorder(T-right);printf(%c , T-data);void Levelorder(struct BTreeNode* BT)struc
6、t BTreeNode* p;struct BTreeNode* q30;int front=0,rear=0;if(BT!=NULL) rear=(rear+1)% 30;qrear=BT;while(front!=rear) front=(front+1)% 30;p=qfront;printf(%c ,p-data);if(p-left!=NULL) rear=(rear+1)% 30;qrear=p-left;if(p-right!=NULL) rear=(rear+1)% 30;qrear=p-right;int getHeight(struct BTreeNode* T)int l
7、h,rh;if (T = NULL) return 0;lh = getHeight(T-left);rh = getHeight(T-right);return lhrh ? lh + 1 : rh + 1;void main(void)struct BTreeNode* T;CreateBTree(&T);printf(前序序列:n);Preorder(T);printf(n);printf(中序序列:n);Inorder(T);printf(n);printf(后序序列:n);Postorder(T);printf(n);printf(层次遍历序列:n);Levelorder(T);pr
8、intf(n);printf(二叉树高度:%dn, getHeight(T);4.运行结果问题二: 哈夫曼编码、译码系统1. 问题描述对一个ASCII编码的文本文件中的字符进行哈夫曼编码,生成编码文件;反过来,可将编码文件译码还原为一个文本文件(选做)。v 从文件中读入给定的一篇英文短文(文件为ASCII编码,扩展名为txt);v 统计并输出不同字符在文章中出现的频率(空格、换行、标点等不按字符处理);v 根据字符频率构造哈夫曼树,并给出每个字符的哈夫曼编码;v 将文本文件利用哈夫曼树进行编码,存储成编码文件(编码文件后缀名.huf)v 进行译码,将huf文件译码为ASCII编码的txt文件,
9、与原txt文件进行比较。(选做)2. 设计描述(1) 统计并输出不同字符在文章中出现的频率,通过建立两个数组chs和chs_freq来实现,chs存储文件中出现过的字符,chs_freq(初始化为全0)存储对应字符在文件中出现的频数,当扫描一个字符时,先与chs中已有字符进行比较,若数组中存在该字符,则将该字符对应频数加1,否则则将该字符加入数组,并频数加1。(2) 根据字符频率构造哈夫曼树,即将chs_freq数组作为权值数组,建立哈夫曼树,为了方便后续操作,为结构体BtreeNode添加一个新的成员变量symbol,建立二叉树时用以存储对应权值的字符。(3) 通过最优二叉树(哈夫曼树)输出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 二叉 遍历 实验 试验 报告 讲演 呈文
限制150内