- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
例7-5 设有字符集{A, B, C, D},各字符在电文中出现的次数集为{1, 3, 5, 7},设计各字符的哈夫曼编码。 程序设计如下: #include iostream.h #include stdlib.h ? const int MaxValue = 10000; //初始设定的权值最大值 const int MaxBit = 4; //初始设定的最大编码位数 const int MaxN = 10; //初始设定的最大结点个数 ? #include HaffmanTree.h void main(void) { int i, j, n = 4; int weight[] = {1,3,5,7}; HaffNode *myHaffTree = new HaffNode[2*n+1]; Code *myHaffCode = new Code[n]; if(n MaxN) { cout 定义的n越界,修改MaxN! endl; exit(0); } Haffman(weight, n, myHaffTree); HaffmanCode(myHaffTree, n, myHaffCode); //输出每个叶结点的哈夫曼编码 for(i = 0; i n; i++) { cout Weight = myHaffCode[i].weight Code = ; for(j = myHaffCode[i].start+1; j n; j++) cout myHaffCode[i].bit[j]; cout endl; } } 7.8 树与二叉树的转换 1.树转换为二叉树 树转换为二叉树的方法是: (1)树中所有相同双亲结点的兄弟结点之间加一条连线。 (2)对树中不是双亲结点第一个孩子的结点,只保留新添加的该结点与左兄弟结点之间的连线,删去该结点与双亲结点之间的连线。 (3)整理所有保留的和添加的连线,使每个结点的第一个孩子结点连线位于左孩子指针位置,使每个结点的右兄弟结点连线位于右孩子指针位置。 A B C D E F G A B C D E F G A B C D E F G A B E F C D G ( a ) ( b ) ( c ) ( d ) 树转换为二叉树的过程 (a)树;(b)相临兄弟加连线;(c)删除双亲与非第一个孩子连线;(d)二叉树 2.二叉树还原为树 二叉树还原为树的方法是: (1)若某结点是其双亲结点的左孩子,则把该结点的右孩子、右孩子的右孩子……都与该结点的双亲结点用线连起来。 (2)删除原二叉树中所有双亲结点与右孩子结点的连线。 (3)整理所有保留的和添加的连线,使每个结点的所有孩子结点位于相同层次高度。 二叉树还原为树的过程 (a)二叉树;(b)双亲与非第一个孩子加连线; (c)删除结点与右孩子连线;(d)树 A B E F C D G A B E F C D G A B E F C D G A B C D E F G ( a ) ( b ) ( c ) ( d ) * * 7.4 二叉树类 二叉树类设计如下: template class T class BiTree { private: BiTreeNodeT *root; //根结点指针 ? void Destroy(BiTreeNodeT* t); void PreOrder(BiTreeNodeT* t, void (*Visit)(T item)); void InOrder(BiTreeNodeT* t, void (*Visit)(T item)); void PostOrder(BiTreeNodeT* t, void (*Visit)(T item)); public: BiTree(void):root(NULL){}; //构造函数 ~BiTree(void){}; //析构函数 ? //构造二叉树 void MakeTree(const T item, BiTreeT left, BiTreeT right); void Destroy(void); //撤消二叉树 ? void PreOrder(void (*Visit)(T item)); //前序遍历 void InOrder(void (*Visit)(T item)); //中序遍历 void PostOrder(void (*Visit)(T item)); //后序遍历 }; template class T void BiTreeT::MakeTree(const T it
文档评论(0)