题目内容 (请给出正确答案)
[单选题]

设一组权值集合W=(2,4,5,7),要求根据这些权值集合构造一棵哈夫曼树,则这棵哈夫曼树的带权路径长度为 。

A.36

B.46

C.35

D.34

查看答案
如搜索结果不匹配,请 联系老师 获取答案
您可能会需要:
您的账号:,可能会需要:
您的账号:
发送账号密码至手机
发送
更多“设一组权值集合W=(2,4,5,7),要求根据这些权值集合构…”相关的问题

第1题

设给定一个权值集合W=(6,2,3,9,7),要求根据给定的权值集合,试完成: (1)构造一棵哈夫曼树; (2)计算哈夫曼树的带权路径长度WPL。
点击查看答案

第2题

给定5个字符a~f,它们的权值集合W={2,3,4,7,8,9},试构造关于W的一棵哈夫曼树,求其带权路径长度WPL和各个字符的哈夫曼树编码。

点击查看答案

第3题

【Ex-6-5】给定5个字符a~f,它们的权值集合W={2,3,4,7,8,9},试构造关于W的一棵哈夫曼树,求其带权路径长度WPL和各个字符的哈夫曼树编码。
点击查看答案

第4题

已知权值集合为{5,7,2,3,6,9},要求给出哈夫曼树,并计算带权路径长度WPL。
点击查看答案

第5题

给定8个权值集合(2,5,3,10,4,7,9,18),画出含有8个叶子结点的最佳三叉归并树,并计算出wpl为多少?【东北大学1996一、2(5分)】

点击查看答案

第6题

阅读以下函数说明和C代码,将C程序中(1)~(5)空缺处的内容补充完整。

【说明】

对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合{a,b,c,d}及其权值2、7、4、5,可构造如图6-15所示的最优二叉树,以及相应的结构数组Ht(如表6-14所示,其中数组元素Ht[0]不用)。

结构数组Ht的类型定义如下:

define MAXLEAFNUM 20

struct node{

char ch; /*扫当前节点表示的字符,对于非叶子节点,此域不用*/

Int weight; /*当前节点的权值*/

int parent; /*当前节点的父节点的下标,为0时表示无父节点*/

int lchild, rchild;

/*当前节点的左、右孩子节点的下标,为0时表示无对应的孩子节点*/

)Ht[2*MAXLEAFNUM];

用“0”或“广标识最优二叉树中分支的规则是:从一个节点进入其左(右)孩子节点,就用“0”(或“1”)标识该分支,如图6-15所示。

若用上述规则标识最优二叉树的每条分支后,从根节点开始到叶子节点为止,按经过分支的次序将相应标识依次排列,可得到由“0”、“1”组成的一个序列,称此序列为该叶子节点的前缀编码。例如,图6-15所示的叶子节点a、b、c、d的前缀编码分别是110、0、111、10。

函数void LeafCode(int root,int n)的功能是:采用非递归方法,遍历最优二叉树的全部叶子节点,为所有的叶子节点构造前缀编码。其中,形参root为最优二叉树的根节点下标;形参n为叶子节点个数。在函数void LeafCode(int root,int n)构造过程中,将Ht[p].weight域用做被遍历节点的遍历状态标志。

函数void Decode(char *buff,int root)的功能是:将前缀编码序列翻译成叶子节点的字符序列,并输出。其中,形参root为最优二叉树的根节点下标;形参buff指向前缀编码序列。

【函数4.1】

char **HC;

void LeafCode(int root, int n)

{ /*为最优二叉树中的n个叶子节点构造前缀编码,root是树的根节点下标*/

int I,p=root,cdlen=0;

char code[20];

Hc = (char **)malloc((n+1)*sizeof(char *)); /*申请字符指针数组*/

For(i = 1;i<= p;++I)

Ht [i]. weight = 0; /*遍历最优二叉树时用做被遍历节点的状态标志* /

While (p) { /*以非递归方法遍历最优二叉树,求树中每个叶子节点的编码*/

If(Ht[p].weight == 0) { /*向左*/

Ht[p].weight = 1;

If(Ht[p].lchild != 0) {

p = Ht[p].lchild;

code[cdlen++] = '0';

}

else if(Ht[p].rchild == 0) { /*若是叶子节点,则保存其前缀编码*/

Hc[p] = (char *)malloc((cdlen+1)*sizeof(char));

(1);

strcpy (Hc [p],code);

}

}

else if(Ht[p].weight == 1) { /*向右*/

Ht [p].weight = 2;

If(Ht[p].rchild != 0) {

p = Ht [p].rchild;

code[cdlen++] ='1';

}

}

else { /*Ht[p].weight == 2,回退/

Ht [p].weight = 0;

p =(2);

(3); /*退回父节点*/

}

} / *while .结束* /

}

【函数4.2】

void Decode(char *buff,int root)

{ int pre = root,p;

while(*buff != '\0') {

p = root;

&

点击查看答案

第7题

阅读以下预备知识、函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【预备知识】

①对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合{a,b,c,d}及其权值2、7、4、5,可构造如图3所示的最优二叉树和相应的结构数组Ht(数组元素Ht[0]不用)(见表5)。

图3最优二叉树

表5 结构数组Ht

结构数组Ht的类型定义如下:

define MAXLEAFNUM 20

struct node{

char ch;/*当前结点表示的字符,对于非叶子结点,此域不用*/

int weight;/*当前结点的权值*/

int parent;/*当前结点的父结点的下标,为0时表示无父结点*/

int lchild,rchild;

/*当前结点的左、右孩子结点的下标,为0时表示无对应的孩子结点*/

}Ht[2*MAXLEAFNUM];

②用′0′或′1′标识最优二叉树中分支的规则是:从一个结点进入其左(右)孩子结点,就用′0′(′1′)标识该分支(示例如图3所示)。

③若用上述规则标识最优二叉树的每条分支后,从根结点开始到叶子结点为止,按经过分支的次序,将相应标识依次排列,可得到由′0′、′1′组成的一个序列,称此序列为该叶子结点的前缀编码。例如图3所示的叶子结点a、b、c、d的前缀编码分别是110、0、111、10。

【函数5.1说明】

函数void LeafCode(int root,int n)的功能是:采用非递归方法,遍历最优二叉树的全部叶子结点,为所有的叶子结点构造前缀编码。其中形参root为最优二叉树的根结点下标;形参n为叶子结点个数。

在构造过程中 ,将Ht[p].weight域用作被遍历结点的遍历状态标志。

【函数5.1】

char**Hc;

void LeafCode(int root,int n)

{/*为最优二叉树中的n个叶子结点构造前缀编码,root是树的根结点下标*/

int i,p=root,cdlen=0;char code[20];

Hc=(char**)malloc((n+1)*sizeof(char*));/*申请字符指针数组*/

for(i=1;i<=p;++i)

Ht[i].weight=0;/*遍历最优二叉树时用作被遍历结点的状态标志*/

while(p){/*以非递归方法遍历最优二叉树,求树中每个叶子结点的编码*/

if(Ht[p].weight==0){/*向左*/

Ht[p].weight=1;

if (Ht[p].lchild !=0) { p=Ht[p].lchild; code[cdlen++]=′0′;}

else if (Ht[p].rchild==0) {/*若是叶子结 点,则保存其前缀编码*/

Hc[p]=(char*)malloc((cdlen+1)*sizeof(char));

(1) ;strcpy(He[p],code);

}

}

else if (Ht[p].weight==1){/*向右*/

Ht[p].weight=2;

if(Ht[p].rchild !=0){p=Ht[p].rchild;code[cdlen++]=′1′;}

}

else{/*Ht[p].weight==2,回退*/

Ht[p].weight=0;

p= (2) ; (3) ;/*退回父结点*/

}

}/*while结束*/

}

【函数5.2说明】

函数void Decode(char*buff,int root)的功能是:将前缀编码序列翻译成叶子结点的字符序列并输出。其中形参root为最优二叉树的根结点下标;形参buff指向前缀编码序列。

【函数5.2】

void Decode(char*buff,int root)

{ int pre=root,p;

while(*buff!=′\0′){

p=root;

while(p!=0){/*存在下标为p的结点*/

pre=p;

if( (4) )p=Ht[p].lchild;/*进入左子树*/

else p=Ht[p].rchild;/*进入右子树*/

buff++;/*指向前缀编码序列的下一个字符*/

(5) ;

printf(″%c″,Ht[pre].ch);

}

}

点击查看答案

第8题

设一组权值集合W=(15,3,14,2,6,9,16,17),要求根据这些权值集合构造一棵哈夫曼树,则这棵哈夫曼树的带权路径长度为( )。

A.129

B.219

C.189

D.229

点击查看答案

第9题

对于给定的一组权值 w=(1,4,9,1,25,3,49,4,81,100) 构造具有最小带权外部路径长度的扩充二叉树,并求出它的带权外部路径长度。

点击查看答案

第10题

对于给定的一组权值

  w=(1,4,9,1,25,3,49,4,81,100}

  构造具有最小带权外部路径长度的扩充二叉树,并求出它的带权外部路径长度。

点击查看答案
热门考试 全部 >
相关试卷 全部 >
账号:
你好,尊敬的上学吧用户
发送账号至手机
密码将被重置
获取验证码
发送
温馨提示
该问题答案仅针对搜题卡用户开放,请点击购买搜题卡。
马上购买搜题卡
我已购买搜题卡, 登录账号 继续查看答案
重置密码
确认修改
谢谢您的反馈

您认为本题答案有误,我们将认真、仔细核查,
如果您知道正确答案,欢迎您来纠错

警告:系统检测到您的账号存在安全风险

为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!

微信搜一搜
上学吧
点击打开微信
警告:系统检测到您的账号存在安全风险
抱歉,您的账号因涉嫌违反上学吧购买须知被冻结。您可在“上学吧”微信公众号中的“官网服务”-“账号解封申请”申请解封,或联系客服
微信搜一搜
上学吧
点击打开微信