- 1、本文档共116页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
陈建国 J.G.Chen@163.com 算法 根据先根序列创建二叉树 int i=0; BinTree createRest_BTree(char *string) /* 递归创建从根开始的二叉树 */ { PBinTreeNode pbnode; char ch; ch=string[i++]; if(ch==@) pbnode=NULL; else { pbnode =new struct BinTreeNode; pbnode-info=ch; pbnode-llink=createRest_BTree(string);//构造左子树 pbnode-rlink=createRest_BTree(string);//构造右子树 } return pbnode; } 算法5.1 void preOrder( BinTree t) { if (t==NULL) return; visit(root(t)); preOrder(leftChild(t)); preOrder(rightChild(t)); } //输出二叉树 void disptree1( BinTree p) { //先序输出p为根的二叉树 if (p==NULL) {cout@; return;} coutp-info; disptree1(p-llink); disptree1(p-rlink); } void dispTree2( BinTree t) { //以括号表示法D(L,R)输出二叉树t if (t==NULL) return; coutt-info; if(t-llink!=NULL||t-rlink!=NULL){ cout(;dispTree2(t-llink); cout,;dispTree2(t-rlink);cout); } } 5.6.2 树的子表表示法 小 结 树、树林、二叉树的一些基本概念和术语; 二叉链表存储结构 树、二叉树的周游 哈夫曼树的构造方法及应用 结点表中的每一元素又包含一个子表,存放该结点的所有子结点。结点表顺序存放,子表用链接表示。 struct EdgeNode /* 子表中节点的结构 */ { int nodeposition; struct EdgeNode *link; }; struct ChiTreeNode /* 结点表中节点的结构 */ { DataType info; struct EdgeNode *children; }; 5.4 二叉树的应用 5.4.1 堆与优先队列* 5.4.2 哈夫曼树及其应用 5.4.2 哈夫曼树及其应用 扩充二叉树的外部路径长度: 其中:li为从根到第i个外部结点的路径长度,m为外部结点的个数 扩充二叉树的带权的外部路径长度 其中:wi是第i个外部结点的权值,li为从根到第i个 外部结点的路径长度,m为外部结点的个数。 哈夫曼树 假设有一组(无序)实数{w1 , w2 , w3 ,…, wm},现要构造一棵以wi(i = 1,2,…,m)为权的m个外部结点的扩充的二叉树,使得带权的外部路径长度WPL最小。满足这一要求的扩充二叉树就称为哈夫曼树或最优二叉树。 例如以下是带有相同权值5,4,7,2,5的四棵二叉树。 2 4 5 7 5 (a) 2 4 5 7 5 (b) 2 7 5 4 5 (c) 2 4 5 7 5 (d) 它们的带权路径长度分别为: (a)WPL=2?1+7?4+5?4+5?3+4?2=73 (b)WPL=7?3+ 4?3+5?3+5?3+2?1=65 (c)WPL=5?2+ 5?2+2?3+4?3+7?2=52 (d)WPL=4?3+ 2?3+7?2+5?2+5?2=52 其中(c)和(d)树的带权路径长度为最小。可以验证它们恰为最优二叉树。 在解某些判定问题时,利用赫夫曼树可以得到最佳判定算法。 例如,编制一个将百分制转换成五级分制的程序。通常的算法是: If(a60) b=‘E’; else if(a70) b=‘D’; else if(a80) b=‘C’; else if(a90) b=‘B’; else b=‘A’; 在实际生活中,学生的成绩在五个等级上的分布是不均匀的。假设其分布规律如下表示: 90~100 80
文档评论(0)