数据结构 树和二叉树代码.doc
《数据结构 树和二叉树代码.doc》由会员分享,可在线阅读,更多相关《数据结构 树和二叉树代码.doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、树和二叉树一、实验目的:参照给定的二叉树类的程序样例,验证给出的有关二叉树的常见算法,并实现有关的操作。二、实验要求:1、掌握二叉树、哈夫曼树和树的特点。掌握它们的常见算法。2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。三、实验内容: 1设计实现二叉树类,要求:(1)编写一个程序,首先建立不带头结点的二叉链式存储结构的二叉树,然后分别输出按照前序遍历二叉树、中序遍历二叉树和后序遍历二叉树访问各结点的序列信息,最后再测试查找函数和撤销函数的正确性。(2)实现二叉树层次遍历的非递归算法。 (3) 假设二叉树采用链式存储结构进行
2、存储,编写一个算法,输出一个二叉树的所有叶子结点,并统计叶子结点个数。(4)编写求二叉树高度的函数 (5)编写一主函数来验证算法实现。2. 设计实现二叉线索链表类,要求:(1)编写一个程序,首先建立中序线索链表的二叉树,然后实现中序线索链表的遍历算法。(2)编写一主函数来验证算法实现。*3. 编写创建哈夫曼树和生成哈夫曼编码的算法。*4假设二叉树采用链式存储结构进行存储,试设计一个算法,输出从每个叶子结点到根结点的路径。*5假设二叉树采用链式存储结构进行存储,试设计一个算法,求二叉树的宽度(即具有结点数最多的层次上结点总数)四、程序样例#include#includeusing namespa
3、ce std;template struct BiNodeT data;BiNode *lchild, *rchild;int max(int a,int b)return a b ? a : b; template class BiTreepublic:BiTree( ); /构造函数,初始化一棵空的二叉树BiTree()/二叉树的析构函数算法BiTreeRelease(root); void InOrder() InOrder(root); /中序遍历二叉树void PreOrder() PreOrder(root);void PostOrder()PostOrder(root); /后序
4、遍历二叉树void LeverOrder()LeverOrder(root); /层序遍历二叉树void Count()Count(root);void PreOrdercnt()PreOrdercnt(root);int Depth()int www = Depth(root); return www;private:BiNode *root; /指向根结点的头指针void Creat(BiNode *&root);void PreOrder(BiNode *root); /前序遍历二叉树 void InOrder(BiNode *root); void PostOrder(BiNode *
5、root);void LeverOrder(BiNode *root); /层序遍历二叉树void Release(BiNode *root); /析构函数调用void Count(BiNode *root) ;/求二叉树的结点个数void PreOrdercnt(BiNode *root);/设计算法按前序次序打印二叉树中的叶子结点;int Depth(BiNode *root);/深度;;template BiTree:BiTree()Creat(root);template void BiTree :Creat(BiNode *&root) char ch; cinch; if (ch=
6、#) root=NULL; /建立一棵空树else root=new BiNode; /生成一个结点root-data=ch;Creat(root-lchild); /递归建立左子树Creat(root-rchild); /递归建立右子树 template void BiTree:LeverOrder(BiNode *root)BiNode * Q100;int front = 0, rear = 0; /采用顺序队列,并假定不会发生上溢if (root=NULL) return; Q+rear=root;while (front!=rear)BiNode * q=Q+front;coutda
7、talchild!=NULL) Q+rear=q-lchild;if (q-rchild!=NULL) Q+rear=q-rchild; template void BiTree:PostOrder(BiNode *root) if (root = NULL) return; /递归调用的结束条件else PostOrder(root-lchild); /后序递归遍历root的左子树PostOrder(root - rchild);/后序递归遍历root的右子树coutdata ;/访问根结点的数据域template void BiTree:PreOrder(BiNode *root) if
8、(root =NULL) return; /递归调用的结束条件else coutdatalchild); /前序递归遍历root的左子树PreOrder(root-rchild); /前序递归遍历root的右子树 template void BiTree :Release(BiNode *root)if (root!=NULL) Release(root-lchild); /释放左子树Release(root-rchild); /释放右子树delete root; template void BiTree:InOrder (BiNode *root)/二叉树的中序遍历递归算法InOrderif
9、 (root=NULL) return; /递归调用的结束条件else InOrder(root-lchild); /中序递归遍历root的左子树coutdatarchild); /中序递归遍历root的右子树int n = 0;template void BiTree:Count(BiNode *root) /n为全局量并已初始化为0 if (root) Count(root-lchild); n+; /求二叉树的结点个数 Count(root-rchild); int cnt = 0;template void BiTree:PreOrdercnt(BiNode *root)/设计算法按前
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 树和二叉树代码 二叉 代码
限制150内