文章

164

粉丝

0

获赞

1

访问

91.7k

头像
2014年(408)计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年11月21日 21:15
阅读数 381

(1)仅需要找到叶子节点距离根结点的距离和即可,利用类似中序遍历的思想,设置一个sums值用于计算WPL值,采用depth计算当前所处深度,若遍历到的节点无左右子树,则说明此时为叶子节点,将该节点权值乘以当前深度在加上sum,直到整颗树遍历完毕。

(2)typedef struct BitTree 

{

 int weight;

struct BitTree* left;

struct BitTree* right;

}BitTree,*tree;

(3)

初始化树,设置树根指针为root;

int sum=0;

int depth=1;

void Midtrav(tree* t, int depth)

{

if(t->left!=NULL) Midtrav(t->left,depth+1);

else if(t->right!=NULL) Midtrav(t->right,depth+1);

else sum+= depth*t->weight;

}

Midtrav(root,1);

cout<<sum<<endl;


评分及理由

(1)得分及理由(满分3分)

得分:1分

理由:学生基本理解了需要遍历二叉树并计算叶子节点的带权路径长度,提到了使用深度和权值相乘的累加思想。但是存在以下问题:

  • 描述中说是"类似中序遍历的思想",但实际算法描述中并不是标准的中序遍历(左-根-右)
  • 算法思想描述不够清晰准确,没有明确说明递归过程中深度参数如何传递
  • 没有区分叶子节点和非叶子节点的处理逻辑

(2)得分及理由(满分4分)

得分:3分

理由:数据类型定义基本正确,包含了必要的weight、left、right字段,但存在以下问题:

  • 结构体名称写为"BitTree"而不是常见的"BiTNode"(虽然这不是错误,但不够规范)
  • 缺少分号结尾(在代码中应该是有的,但从描述看可能遗漏)
  • 整体结构基本正确,扣1分

(3)得分及理由(满分6分)

得分:1分

理由:算法实现存在严重逻辑错误:

  • 递归终止条件错误:只有当左右子树都为空时才应该是叶子节点,但代码中的els...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发