第7章树形结构4.ppt
《第7章树形结构4.ppt》由会员分享,可在线阅读,更多相关《第7章树形结构4.ppt(33页珍藏版)》请在三一办公上搜索。
1、第七章 树和二叉树,7.8 哈夫曼树7.8.1 哈夫曼树概述7.8.2 哈夫曼树的构造算法7.8.3 哈夫曼编码,7.7 线索二叉树,7.7.1 线索二叉树的概念,7.7.2 线索二叉树,上次课的总结:,画出该棵二叉树的先序、中序和后序线索二叉树,上次课的总结:,上次课的总结:,画出该棵二叉树的先序、中序和后序线索二叉树,7.7.2 线索化二叉树 为了实现线索化二叉树,将前面二叉树结点的类型定义修改如下:typedef struct node ElemType data;/*结点数据域*/int ltag,rtag;/*增加的线索标记*/struct node*lchild;/*左孩子或线索指
2、针*/struct node*rchild;/*右孩子或线索指针*/TBTNode;/*线索树结点类型定义*/,typedef struct node ElemType data;int ltag,rtag;/增加的线索标记struct node*lchild;struct node*rchild;TBTNode;TBTNode*CreateTBTNode(char*str)/建立二叉树(二叉链表的方式)TBTNode*CreaThread(TBTNode*b)/中序线索化二叉树,7.7.2 线索化二叉树 算法设计,1,算法设计,TBTNode*CreaThread(TBTNode*b)/线索
3、化二叉树,增加一个头结点,将整棵树作为他的左孩子,选择一种遍历方式,将二叉树线索化,生成某种访问顺序的线索化二叉树。,TBTNode*CreaThread(TBTNode*b)/*中序线索化二叉树*/TBTNode*root;root=(TBTNode*)malloc(sizeof(TBTNode);/*创建头结点*/root-ltag=0;root-rtag=1;root-lchild=b;pre=root;Thread(b);pre-lchild=root;pre-rtag=1;root-rchild=pre;return root;,pre,1,Thread(p)算法思路是:*p 指向当
4、前访问的结点*pre指向前一访问的结点采用中序遍历的方式Thread(b-lchild);printf(%c,b-data);Thread(b-rchild);,当前访问结点没有左孩子,就设置为线索,指向前驱如果访问过的结点没有右孩子,则设置为线索,指向后继,TBTNode*pre;/*全局变量*/void Thread(TBTNode*/*递归调用右子树线索化*/,中序遍历(递归),7.8 哈夫曼树与哈夫曼编码,哈夫曼(Huffman)树,又称最优二叉树,是一类带权路径长度最短的树。概念:两结点间的路径:从一结点到另一结点所经过的结点序列。路径长度:从树中一个结点到另一个结点之间路径上的分支
5、数。树的路径长度:树根到每一个结点的路径长度之和称为。,结点1到5之间的路径:(1)(2)(5),结点1到5之间的路径长度:2,树的路径长度:1+1+2+2+2+2+2=10,树的带权路径长度WPL:设树中有M个叶结点,每个叶结点带一个权值WK,树根到每一个叶结点K的路径长度为LK则WPL=。,哈夫曼树:WPL最小的树称为最优二叉树,又称哈夫曼树,举例:有4个叶结点a,b,c,d权值分别为7,5,4,2,请构造出哈夫曼树,WPL=7*2+5*2+4*2+2*2=36,哈夫曼树:WPL最小的树称为最优二叉树,又称哈夫曼树,举例:有4个叶结点a,b,c,d权值分别为7,5,4,2,请构造出哈夫曼树
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 树形 结构

链接地址:https://www.31ppt.com/p-4749427.html